Boa noite, eu gostaria de saber se tem como eu configurar a segurança de um pequeno sistema onde eu teria que criar/cadastrar usuarios com permissoes em diretorios de forma dinamica. Pois vi que nos tutoriais é necessario “setar” as “roles” nos diretorios. Por exemplo:
E então eu gostaria de criar usuarios com permissões no DiretorioB e DiretorioD ou então no DiretorioC ou DiretorioD…
Acho que este exemplo pode ser melhor representado em uma tabela.
Cheguei a pensar que poderia ser modificado na hora da busca da tabela de grupos… mas nao sei mesmo.
Se alguem já passou por alguma situação dessa ou tem alguma ideia de como resolver…
agradeço desde já!
Os usuários vão acessar arquivos via compartilhamento de arquivos?
Seu servidor é windows?
Se a resposta for sim, fiz uma pesquisa rápido e encontrei esta biblioteca: http://www.ioplex.com/
Ela faz integração com o Active Directory e diz que permite atualizar contas e grupos de usuários.
Entretanto, nunca a usei ou precisei fazer algo semelhante.
Olá amigo acho que uma boa opção seria você utilizar o SpringSecurity, o JAAS também resolve mas você fica preso ao contêiner web. Pessoalmente eu prefiro utilizar o SpringSecurity mas vai de cada um. Se quiser comferir algo sobre SpringSecurity fiz algumas vídeo aulas sobre JSF no geral e algumas delas abordam o SpringSecurity em específico. Você pode assistir as aulas no Youtube (das aulas 31 à 34) e conferir o código no GitHub. O projeto foi feito com primefaces mas acho que não muda muito com o RichFaces não.
leandrocgsi vlw pela dica, eu ja ouvi fala sobre esse framework, vou verificar.
Mas eu queria mesmo usar so o JAAS.
Fiz um teste, onde achei que ia funcionar. Mas não funcionou!
Pelos tutoriais que andei vendo, de forma geral eles utilizam uma tabela no banco de dados onde é verificado, pelo container, o login, senha e a role para que possa dar a autorização para o usuario em um determinado caminho ou arquivo.
O teste que eu fiz, foi pensando que ele “poderia” verificar login, senha e várias roles. Entao criei as tabelas onde cada usuario poderia ter mais que uma role “setada” nele.
E apresentou o seguinte erro:
[code]
01:25:23,113 ERROR [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http-localhost-127.0.0.1-8080-1) Login failure: javax.security.auth.login.LoginException: PB00019: Processing Failed:Query failed
at org.jboss.security.auth.spi.DbUtil.getRoleSets(DbUtil.java:166) [picketbox-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.auth.spi.Util.getRoleSets(Util.java:158) [picketbox-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.auth.spi.DatabaseServerLoginModule.getRoleSets(DatabaseServerLoginModule.java:265) [picketbox-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.auth.spi.AbstractServerLoginModule.commit(AbstractServerLoginModule.java:228) [picketbox-4.0.7.Final.jar:4.0.7.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_10]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_10]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_10]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696) [rt.jar:1.7.0_10]
at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695) [rt.jar:1.7.0_10]
at javax.security.auth.login.LoginContext.login(LoginContext.java:595) [rt.jar:1.7.0_10]
at org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:449) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.authentication.JBossCachedAuthenticationManager.proceedWithJaasLogin(JBossCachedAuthenticationManager.java:383) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:371) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:160) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
at org.jboss.as.web.security.JBossWebRealm.authenticate(JBossWebRealm.java:214) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:381) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_10]
Caused by: java.sql.SQLException: Column Index out of range, 2 > 1.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:830)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5773)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5692)
at org.jboss.jca.adapters.jdbc.WrappedResultSet.getString(WrappedResultSet.java:1360)
at org.jboss.security.auth.spi.DbUtil.getRoleSets(DbUtil.java:135) [picketbox-4.0.7.Final.jar:4.0.7.Final]
… 31 more[/code]
No banco de dados havia duas roles para um usuario.
Acho que pelo fato de aparecer esses dois valores impossibilita esse funcionamento.
Mas ainda não desisti do JAAS.
Pensei agora em criar várias roles. Onde vamos ter uma que irá dar acesso a todo conteudo do sistema (admin) e as outra vão permitir apenas algumas partes dela. O usuario que tem a role “admin” tera acesso a todo sistema sempre, e seu atributo “role” dentro da entidade “usuario” nunca será modificada. Já os outros usuario terá o valor do atributo “role” variado, pois ele será modificado de acordo com as permissões que ele possui, gravadas em uma lista. Então se o usuario que tem permissao para acessar os diretorios A e D, o atributo “role” sera modificada (na base de dados da coluna role) sempre que houver necessidade de estar no diretorio A ou D apenas.
Gostaria de sugestoes sobre essa ideia ou de alguma outra no JAAS.