JAAS Autorização

Senhores,

estou utilizando o JBoss e estou com dúvidas sobre autorização. A autenticação está funcionando corretamente.

Tenho duas roles A e B.

A role A pode acessar “a.do e b.do”

Já role B pode acessar “a.do e c.do”

Quando logo com um usuário que esteja relacionado com a role B ele consegue acessar a página b.do depois do login.

Utilizo o Struts e o que notei é que toda requisição que tenha restrição de acesso sempre passa pela Action criei para realizar o login. Ou seja, a primeira vez chama esta Action e mesmo após o login continua chamando quando deveria somente acredito fazer autorização.

Alguém sabe o por que acontece isto?

Acredito que seja algum problema de configuração.

CG

Você está fazendo o controle de perfil via código ou via web.xml?
Qual servidor está utilizando? Tomcat? JBoss?

o controle é via web.xml e utilizo o JBOSS 4.0.5

O que aparenta é que não considera o perfil cadastrado no web.xml

Att,

[quote=cgneo]o controle é via web.xml e utilizo o JBOSS 4.0.5

O que aparenta é que não considera o perfil cadastrado no web.xml

Att,[/quote]
Cara, o problema não é isso. O problema é que deve-se “ensinar” o JBoss como e onde fazer a autenticação.
Basicamente, você deve fazer algumas configurações especiais para fazer a coisa funcionar. A configuração principal deve ser feita no arquivo %JBOSS_HOME%\server\default\conf\login-config.xml. Nesse xml você deve indicar o nome do seu Pool de conexão com BD, bem como as Querys para recuperar o PERFIL e LOGIN do usuário no BD. É nesse arquivo que você ATIVA a política de autenticação.
O Pool é indicado no arquivo nomeDoBanco-ds.xml. Ex: hsqldb-ds.xml, oracle-ds.xml. Esse arquivo deve estar dentro do diretório DEPLOY. Você deve indicar ainda o Pool no arquivo Jboss-web.xml, sendo que este último arquivo deve estar lado a lado com o web.xml.

JAAS no JBoss não é tão trivial assim, para quem está tendo o primeiro contato. Mas assim que você “pegar” o jeito, a coisa corre tranquilamente.

Oi Amigo,

entendo o que você fala de ensinar o JBoss. Estou colocando a seguir o que já fiz na aplicação para buscar deixar mais claro o problema que estou enfrentando e se puder ajudar agradeceria e muito.

O JBoss que estou utilizando é o JBoss 4.0.5.GA com o jdk 1.4

Realizei as seguintes configurações:

1 - Arquivo web.xml



restricao
/restricao/a.do
/restricao/b.do

	<http-method>POST</http-method>
	<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
	<role-name>restricao</role-name>
</auth-constraint>
FORM /logon.do /logon.do Restricao restricao

2 - No struts-config.xml mapeio o logon.do para chamar a action LoginAction

3 - No arquivo login-config.xml da pasta server\default\conf inseri as seguintes informações




jboss.jca:service=LocalTxCM,name=jdbc/fabrica
java:jdbc/teste
Select password from principal where user =?
Select role ‘Roles’, group ‘RoleGroups’ from roles where user =?



4 - Criei um arquivo jboss-web.xml no WEB-INF da aplicação com a seguinte informação

<?xml version="1.0" encoding="UTF-8"?> java:/jaas/testejaas

5 - Na base adicionei um usuario teste ao role restricao

Agora estarei descrevendo os passos que estou executando nos testes:

1 - Tento acessar o link /restricao/a.do
A aplicação verifica que é uma página restrita e redireciona para o login.do, no qual chama LoginAction. A LoginAction verifica que o j_username e j_password está nulo e manda para a página login.jsp

2 - Informo o username e password e dou submit no form para o login.do
A classe LoginAction recebe estes parâmetros e realiza a autenticação. Até funcionando corretamente.
No struts-config.xml o sucesso da action login.do redireciona para a action a.do.

3 - Chamando a action b.do
Quando tento chamar a action b.do da página do a.do, novamente é redirecionado para o login.do para realizar autenticação. E é nesse ponto que acho que existe algum problema, pois acredito que como já realizei a autenticação o container deveria verificar que não necessito novamente chamar o login.do para acessar a action b.do. Ou seja, acredito que ele só deveria realizar a autorização e isso não está funcionando.

Tomará que esteja mais claro e que alguém consiga dar uma luz para este problema.

Desde já obrigado.