Erro ao ler arquivo de configuração para Provedor de Autenticação JAAS na Primavera
Pergunta
Realmente rasgando meu cabelo fora em um presente. Eu tenho um provedor de autenticação JAAS configurado para o meu webapp Primavera. Eu criei uma definição de feijão para ele o seguinte:
<beans:bean id="jaasAuthenticationProvider"
class="org.springframework.security.providers.jaas.JaasAuthenticationProvider">
<custom-authentication-provider />
<beans:property name="loginConfig" value="file:webapps/mywebapp/WEB-INF/login.conf"/>
<beans:property name="loginContextName" value="myWebapp"/>
<beans:property name="callbackHandlers">
<beans:list>
<beans:bean class="org.springframework.security.providers.jaas.JaasNameCallbackHandler"/>
<beans:bean class="org.springframework.security.providers.jaas.JaasPasswordCallbackHandler"/>
</beans:list>
</beans:property>
</beans:bean>
Meu arquivo login.conf para JAAS:
myWebapp {
com.sun.security.auth.module.Krb5LoginModule
required
doNotPrompt=false
useTicketCache=true
debug=true;
};
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule
required;
};
Quando a mola é inicializado, ele configura o feijão corretamente. Quando tento entrar em minha webapp, no entanto, eu recebo o seguinte erro:
DEBUG webapp.AuthenticationProcessingFilter - Authentication request failed: org.springframework.security.AuthenticationServiceException: I/O error while reading configuration file.; nested exception is javax.security.auth.login.LoginException: I/O error while reading configuration file.
Não consigo encontrar esta mensagem em qualquer lugar erro no código fonte da Primavera, ea própria mensagem de erro não é útil a todos. Alguma idéia o que poderia estar causando isso?
Solução 2
Encontrou a resposta. JAAS foi realmente carregar o arquivo de configuração corretamente, mas eu estava faltando um arquivo krb5.conf na minha JDK local. Este arquivo deve viver em:
$JAVA_HOME/lib/security
Exemplo:
[libdefaults]
default_realm = DOMAIN.NET
dns_lookup_kdc = true
[domain_realm]
.domain.net = DOMAIN.NET
onde domain.net é o nome do domínio Kerberos, e DOMAIN.NET é o mesmo capitalizados apenas.
Outras dicas
Coloque o seu arquivo no classpath em vez de tentar lê-lo a partir do diretório WEB-INF. /webapps/myapp/WEB-INF/classes/login.conf - então em sua mudança de configuração da Primavera a linha para:
<beans:property name="loginConfig" value="classpath:login.conf"/>
Eu não acho que você está recebendo um erro de Primavera, mas recebendo um erro de sistema de arquivos / java, você não tem permissão para ler o diretório WEB-INF.