Autenticação com filtros avançados

Olá galera,

Eu sou novo aqui no Fórum então me perdoem se escrever algo de um jeito que vocês não estão acostumados…

A minha dúvida é a seguinte… na empresa que trabalho temnos nossa aplicação Web toda feita em PHP, e agora ( FINALMENTE ) estamos reescrevendo tudo para JAVA … Pois bem fizemos o estudo de algumas API’s e o projeto está sendo desenvolvido com base em JSF 2 + Spring 3 + JPA …

Nesse nosso sistema o usuário administrador pode criar perfil de acesso e dizer quais páginas determinado usuário pode acessar … a questão é que estava pesquisando algumas api’s como SpringSecurity e JAAS , mas me pareceu bem engessado, principalmente no caso do JAAS … O SpringSecurity achei bem bacana mas não consegui achar nada que explicasse uma forma de eu criar esse tipo dinâmico de perfil sem precisar criar as permissões do .xml

Pois bem, então a minha pergunta é… existe uma forma de fazer isso no SpringSecurity ? Se não… alguém teria alguma sugestão e um caminho a me indicar ?

Agradeço desde já,

Abraços

Você pode customizar o spring security para buscar os usuarios / roles do banco.
http://www.guj.com.br/java/264269-di-spring-3–spring-security-3

Mas as páginas que as roles vão dar acesso ? Também posso configurar dinamicamente ?

Tem possibilidade de criar perfis fixo ou o cliente pode selecionar livremente as páginas que o usuário pode acessar?

Até onde eu sei do SpringSecurity os possíveis níveis de acesso tem que estar declarados no xml o que dificultaria inserir dinâmicamente os perfis. O problema é que não teríamos um regra para tratar.

Acho que você deve criar a tabela com os níveis de acesso do usuário:

Ex:

usuario - acesso
01 - administrar.jsf
01 - excluir.jsf
01 - editar.jsf
02 - consultar.jsp

Vou pesquisar e ver se consigo algo.

Sim, as página que as roles tem acesso também pode ser configurado.

Segue um exemplo:
http://www.javasimples.com.br/spring-2/spring-security-3-deixando-sua-aplicacao-web-segura

edy … o usuário pode criar tanto um novo perfil como inserir as páginas que esse perfil dará acesso, assim basta associar os clientes ao perfil…

Por exemplo, o administrador entra e cria um perfil chamado Apenas_Relatorios , e adiciona acesso aos .jsf apenas de relatórios:

relatorio_1.jsf
relatório_2.jsf

Mas deixa de fora a tela de visulização de Disponibilidades:

disponibilidade_1.jsf
disponibilidade_2.jsf

Porém, tambpém pode acontecer de ele querer que o perfil tenha

relatorio_1.jsf
disponibilidade_1.jsf

E não tenha o resto ? Entendeu ? Bem dinâmico né?

Muito obrigado pela ajuda !

Abraços

[quote=heatcold]Sim, as página que as roles tem acesso também pode ser configurado.

Segue um exemplo:
http://www.javasimples.com.br/spring-2/spring-security-3-deixando-sua-aplicacao-web-segura[/quote]

Pelo que vi nesse exemplo ele também da as permissões de cada ROLE no .xml não ?!

Quais páginas serão vistas , no exemplo dele são configuradas no .xml

<sec:http auto-config="true" access-denied-page="/negado.jsp"> <sec:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?erro=invalido" /> <sec:intercept-url pattern="/funcionario/**" access="ROLE_FUNC,ROLE_GER" /> <sec:intercept-url pattern="/gerente/**" access="ROLE_GER" /> <sec:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> </sec:http>

O seu problema é que você não tem ROLE! Não existem regras para os perfis dinâmicos que você quer implementar. Não sei se o SpringS pode te ajudar. Podemos fazer algumas adaptações que vão dar mais trabalho do que benefícios.

Por exemplo você pode criar regras para cada acesso:

regra para relatorio_1.jsf = CONSULTA
regra para relatroio_2.jsf = CONSULTA, GERENCIA
regra para cosulta_simples.jsf = CONSULTA, GERENCIA, DIRETOR
regra para consulta_complexa.jsf = ETC, ETC, ETC

E de acordo com o usuário monta-se o perfil: usuário_X = ROLE_CONSULTA, ROLE_GERENCIA_SIMPLES

Mas isso tudo deve estar previamente no xml.

[quote=edysnipes]O seu problema é que você não tem ROLE! Não existem regras para os perfis dinâmicos que você quer implementar. Não sei se o SpringS pode te ajudar. Podemos fazer algumas adaptações que vão dar mais trabalho do que benefícios.

Por exemplo você pode criar regras para cada acesso:

regra para relatorio_1.jsf = CONSULTA
regra para relatroio_2.jsf = CONSULTA, GERENCIA
regra para cosulta_simples.jsf = CONSULTA, GERENCIA, DIRETOR
regra para consulta_complexa.jsf = ETC, ETC, ETC

E de acordo com o usuário monta-se o perfil: usuário_X = ROLE_CONSULTA, ROLE_GERENCIA_SIMPLES

Mas isso tudo deve estar previamente no xml.[/quote]

é realmente … isso fica meio impossível, é uma aplicação grande e muito maleavel pra fazer algo assim… tem alguma sugestão ?

Devo fazer com Servlet Filter mesmo pra algo assim ?