Estou escrevendo um JACC
provedor.
Ao longo do caminho, isso significa implementar a PolicyConfiguration
.
O PolicyConfiguration
responsável por aceitar informações de configuração do servidor de aplicativos, como quais permissões são atribuídas a quais funções. Isso é para que Policy
mais tarde possa tomar decisões de autorização quando for entregue informações sobre o usuário atual e o que ele está tentando fazer.
No entanto, não faz parte do PolicyConfiguration
contrato (atroz) manter um mapeamento entre as funções e suas permissões, e Principals
que são atribuídos a essas funções.
Normalmente - sempre, realmente - um servidor de aplicativos hospeda esse mapeamento. Por exemplo, no GlassFish, você afeta esse mapeamento, fornecendo coisas como sun-web.xml
e sun-ejb-jar.xml
e assim por diante com os seus módulos Java EE. (Esses arquivos específicos do fornecedor são responsáveis por dizer, por exemplo, superusers
é um grupo ao qual deve ser atribuída a função de aplicativo admins
.)
Gostaria de reutilizar a funcionalidade fornecida por esses arquivos e gostaria de fazê-lo para o maior número possível de servidores de aplicativos.
Aqui está - totalmente arbitrariamente - a opinião da IBM sobre o assunto, que parece confirmar minha suspeita de que o que eu quero fazer é essencialmente impossível . (Mais munição para o meu caso, que este contrato Java EE em particular não vale o papel em que está impresso.)
Minha pergunta: como faço para obter essas informações de mapeamento de principal para função em - para iniciantes - Glassfish e JBoss de dentro de um PolicyConfiguration
? Se existe uma maneira padrão de fazer isso que eu não conheço, sou todo ouvidos.
fonte
Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.
consulte docs.oracle.com/cd/E24329_01/web.1211/e24485/…Respostas:
A resposta curta é: não existe uma maneira padrão de fazê-lo.
Embora o Glassfish e o JBoss ofereçam suporte a mapeamentos de principal para função, o JACC não assume que todos os contêineres suportam e, portanto, delega a responsabilidade de manter esses mapeamentos na implementação do provedor JACC. Nos documentos (consulte:
PolicyConfiguration.addToRole
method ):Em outras palavras, você precisa implementar isso dentro do seu provedor JACC para cada contêiner. Para o JBoss, por exemplo, você poderia usar uma das subclasses de
AbstractRolesMappingProvider
.fonte
PolicyContextHandler
registro específico do provedor para esse fim, por exemplo) transmita o contrário. Outro provedor também pode desconsiderar a noção de funções (e, portanto, o fornecido pelo contêinerPolicyConfiguration
), operando apenas em mapeamentos de principal para permissão (fornecidos pelo aplicativo) (e onde essas permissões não precisam ser limitadas às do JACC).