Mudando papéis JAAS baseado em bandeiras de licença de software
Pergunta
Eu tenho um bastante comum aplicativo em execução Java EE em JBOSS. Ele usa a autenticação JBoss DatabaseLoginModule JAAS. Ele também tem aplicação camada usuários / papéis em Hibernate que são exatamente o mesmo.
Eu tenho uma idéia (que eu acho que é bastante útil para mim, pelo menos) para ter uma capacidade de bit posso definir no objeto de licença de software (não usando hibernate) que faz com que todos os usuários do utilizador só de leitura. Isto deixa-me fazer uma leitura única versão do produto por relicenciando-lo.
O que eu gostaria de fazer é remapear as associações de usuário com base em um sinalizador booleano acessíveis dentro do programa.
Então, normalmente obtemos (muitos-muitos)
Usuário - * UserRole * -Função - * RoleActions
onde
user.roleid => role.id
Quando o boolean é definido (a capacidade de definir bit na licença de software)
Eu gostaria JAAS agir como todos os usuários foram roleid = 1 quando a licença diz isso.
Todas as idéias?
Solução
Por subclasse DatabaseServerLoginModule posso realizar verificações extras. (Sobre a licença de software)
Trivialmente eu posso então
-
Se a licença expirou, dar o usuário A Readonly (as credenciais são fixos)
-
Se a licença tem o conjunto de bits capacidade de somente leitura, dar ao usuário somente leitura (as credenciais são fixos)
Uma vez que o login foi interceptada, a pesquisa do usuário Hibernate será para o usuário certo.
Outras dicas
Talvez eu estou faltando o barco aqui, mas por que não fazer isso programaticamente?
Em objeto User
, fornecer um getter transitória como getAuthenticatedRoles()
que, adicionalmente, filtrar o que Hibernate
carregado. Associado a isto, faça o original mapeados protected
coleção getter, e usar apenas getAuthenticatedRoles()
de outro código Java.