在Spring中读取JAAS身份验证提供程序的配置文件时出错

时间:2009-06-30 19:56:31

标签: java spring jaas

真的把这头发撕掉了。我有一个为我的Spring webapp配置的JAAS身份验证提供程序。我为它创建了一个bean定义,如下所示:

 <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>

我的JAAS的login.conf文件:

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初始化时,它正确配置bean。但是,当我尝试登录我的webapp时,出现以下错误:

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 个答案:

答案 0 :(得分:1)

将文件放在类路径上,而不是尝试从WEB-INF目录中读取它。 /webapps/myapp/WEB-INF/classes/login.conf - 然后在你的Spring配置中将行改为:

    <beans:property name="loginConfig" value="classpath:login.conf"/>

我认为您没有收到Spring错误,但是如果遇到文件系统/ java错误,则不允许您从WEB-INF目录中读取。

答案 1 :(得分:0)

找到答案。 JAAS实际上正确加载了配置文件,但我在本地JDK中缺少krb5.conf文件。此文件必须存在于:

$JAVA_HOME/lib/security

示例:

[libdefaults]
  default_realm = DOMAIN.NET
  dns_lookup_kdc = true

[domain_realm]
  .domain.net = DOMAIN.NET

其中domain.net是Kerberos域的名称,DOMAIN.NET只是大写的。