archivo de configuración de lectura de error de proveedor de autenticación JAAS en la primavera
Pregunta
Realmente rasga mi pelo fuera de éste. Tengo un proveedor de autenticación JAAS configurado para mi aplicación web de Primavera. He creado una definición de frijol de la siguiente manera:
<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>
Mi archivo 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;
};
Cuando la primavera se inicia, configura el frijol correctamente. Cuando intento acceder a mi aplicación web, sin embargo, me sale el siguiente error:
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.
No puedo encontrar este mensaje de error en cualquier parte del código fuente de la primavera, y el mensaje de error en sí mismo no es útil en absoluto. ¿Alguna idea de lo que podría estar causando esto?
Solución 2
encontrado la respuesta. JAAS en realidad estaba cargando el archivo de configuración correctamente, pero me faltaba un archivo krb5.conf en mi JDK local. Este archivo debe vivir en:
$JAVA_HOME/lib/security
Ejemplo:
[libdefaults]
default_realm = DOMAIN.NET
dns_lookup_kdc = true
[domain_realm]
.domain.net = DOMAIN.NET
donde domain.net es el nombre del dominio de Kerberos, y DOMAIN.NET es el mismo solamente en mayúsculas.
Otros consejos
Ponga su archivo en la ruta de clase en lugar de tratar de leer desde el directorio WEB-INF. /webapps/myapp/WEB-INF/classes/login.conf - a continuación, en la configuración del resorte cambiar la línea a:
<beans:property name="loginConfig" value="classpath:login.conf"/>
No creo que está recibiendo un error de la primavera, pero conseguir un error de sistema de archivos / java, no se le permite leer desde el directorio WEB-INF.