1

本当にこれで私の髪を引き裂きます。SpringWebアプリケーション用に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が正しく構成されます。ただし、Webアプリケーションにログインしようとすると、次のエラーが発生します。

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のソースコードのどこにも見つかりません。エラーメッセージ自体はまったく役に立ちません。これを引き起こしている可能性のあるアイデアはありますか?

4

2 に答える 2

1

WEB-INFディレクトリからファイルを読み取ろうとするのではなく、ファイルをクラスパスに配置します。/webapps/myapp/WEB-INF/classes/login.conf-次に、Spring構成で行を次のように変更します。

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

Springエラーが発生しているとは思いませんが、filesystem / javaエラーが発生しているため、WEB-INFディレクトリからの読み取りは許可されていません。

于 2009-06-30T20:00:01.267 に答える
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 は大文字のみで同じです。

于 2009-06-30T20:32:26.443 に答える