Ошибка чтения файла конфигурации для поставщика аутентификации JAAS весной

StackOverflow https://stackoverflow.com/questions/1065684

  •  21-08-2019
  •  | 
  •  

Вопрос

Этот случай действительно рвет на себе волосы.У меня есть поставщик аутентификации 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top