2016-05-02 6 views
1

私は、クライアント証明書を介してユーザーを認証する小さなJavaアプリケーションを作成しようとしています。 X509証明書をユーザー名にマップする関数の独自の実装を使用するようにTomcatに指示するために、X509UsernameRetrieverClassNameを領域記述子に指定できることをTomcatで見てきました。 機能していないのは、パッケージがあり、org.apache.catalina.realm.X509UsernameRetrieverという関数を実装しているクラスの内部にあっても、指定したクラスが見つからないということだけです。 多くのグーグル・グーグルでは、この問題に対する答えはまだ見つかりませんでした。クラスが見つかりません例外X509UsernameRetrieverClassName Tomcat

助けていただけたら幸いです!

UPDATE:次のように私は(ちょうどテストのために)クラスを実装している

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/"> 
    <Realm className="org.apache.catalina.realm.MemoryRealm" 
      X509UsernameRetrieverClassName="com.packagename.UserFromCert" 
      pathname="conf/tomcat_users.xml"/> 
</Context> 

package com.packgename; 

import java.security.cert.X509Certificate; 

public class UserFromCert implements org.apache.catalina.realm.X509UsernameRetriever { 

    @Override 
    public String getUsername(X509Certificate x509Certificate) { 
     System.out.println(x509Certificate.getSubjectDN().toString()); 
     System.out.println(x509Certificate.getSubjectX500Principal().getName()); 
     return x509Certificate.getSubjectDN().toString(); 
    } 
} 

:私はWebアプリケーションのための私のcontext.xmlファイルにこのクラスを設定

私が実装しようとしているクラスは、tomcatライブラリにあります。

+1

Tomcat設定ファイルを含めると便利です。さらに、この実装クラスはどのように含まれていますか?それはWARにありますか? Tomcatのlibディレクトリにありますか? – rmlan

+0

あなたはあなたのクラスをどこに入れましたか?あなたの戦争で? –

+0

私は自分のクラスを直接パッケージに入れました。それは私が推測する戦争の中で風に突き当たるために配備されています。 –

答えて

0

2年前の以前の契約でTomcat 6.0とよく似たことをしました。私の記憶は少し曇り、コードを残しました(申し訳ありません)が、これがあなた(または他の誰か)を正しい方向に導くのを助けることを願っています。私が何をしたか

されました:

1)Eclipseの
2にカタリナのソースコードをインポートします)同じプロジェクト - 鉱山内の新しいファイルに必要な新しいクラス(複数可)を作成するカスタム実装しました

package org.apache.catalina.realm; 
import java.security.cert.X509Certificate; 

public class CustomX509SubjectDnMapper implements X509UsernameRetriever { 

    public String getUsername(X509Certificate clientCert) { 
     return clientCert.getSubjectDN().getName().toLowerCase(); 
    } 
} 

3)新しいCatalina.jarファイル
4にコードをエクスポートする)Tomcatのlibディレクトリにあるこの新しいCatalina.jarファイルを含める:ユーザー名に証明書の識別名に値をマッピングします。

カスタム実装を同じパッケージに保存しているかどうかはわかりません。私は、Tomcatが消費できるカスタムのCatalina.jarにカスタム実装を導入することが鍵であることを発見しました。 Catalinaを参照する自己完結型のjarファイルをエクスポートしてTomcatコンテナにインポートすることもできます。

とにかく、これはある程度の容量と幸運に役立つことを願っています。

関連する問題