Ошибка чтения файла конфигурации для поставщика аутентификации JAAS весной
Вопрос
Этот случай действительно рвет на себе волосы.У меня есть поставщик аутентификации JAAS, настроенный для моего веб-приложения Spring.Я создал для него определение компонента следующим образом:
<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>
Мой файл login.conf для 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;
};
Когда Spring инициализируется, он правильно настраивает компонент.Однако, когда я пытаюсь войти в свое веб-приложение, я получаю следующую ошибку:
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.
Я не могу найти это сообщение об ошибке нигде в исходном коде Spring, а само сообщение об ошибке вообще бесполезно.Есть какие-нибудь идеи, что может быть причиной этого?
Решение 2
Нашел ответ.JAAS на самом деле правильно загружал файл конфигурации, но мне не хватало файла krb5.conf в моем локальном JDK.Этот файл должен находиться в:
$JAVA_HOME/lib/security
Пример:
[libdefaults]
default_realm = DOMAIN.NET
dns_lookup_kdc = true
[domain_realm]
.domain.net = DOMAIN.NET
где domain.net - имя домена Kerberos, и DOMAIN.NET то же самое, только с заглавной буквы.
Другие советы
Поместите ваш файл в classpath, а не пытайтесь прочитать его из каталога WEB-INF./webapps/myapp/WEB-INF/classes/login.conf - затем в вашей весенней конфигурации измените строку на:
<beans:property name="loginConfig" value="classpath:login.conf"/>
Я не думаю, что вы получаете ошибку Spring, но, получая ошибку файловой системы / java, вам не разрешается читать из каталога WEB-INF.