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?

Foi útil?

Solução

Por subclasse DatabaseServerLoginModule posso realizar verificações extras. (Sobre a licença de software)

Trivialmente eu posso então

  1. Se a licença expirou, dar o usuário A Readonly (as credenciais são fixos)

  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top