Tomcat 7 の Web アプリで JAAS を動作させようとしています。フォーム ベースの認証、カスタム LoginModule、Tomcat JAASRealm を使用しています。私は c:\tomcat_home\7.0 に Tomcat をインストールしており、起動構成で次の JVM 引数を使用して Eclipse でプロジェクトを実行しています。
-Dcatalina.base="C:\Users\user\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1"
-Dcatalina.home="C:\tomcat_home\7.0"
-Dwtp.deploy="C:\Users\user\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps"
-Djava.endorsed.dirs="C:\tomcat_home\7.0\endorsed"
-Djava.security.auth.login.config="C:\tomcat_home\7.0\conf\jaas.config"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file="C:\tomcat_home\7.0\conf\logging.properties"
これには、デフォルトの Eclipse JVM 引数に加えて、JAAS 構成ファイルの java.util.logging フラグと java.security.auth.login.config フラグがあります。
現在、保護されたURL JAASにアクセスするたびに、期待どおりにログインページにリダイレクトされますが、ユーザーとパスワードを送信すると、LoginModuleがチェックを行っていないにもかかわらず、ログイン失敗ページが表示されます-設定しました常に認証します。また、LoginModule に System.out 呼び出しとデバッグ ブレークポイントを入力しましたが、Tomcat をデバッグ モードで実行しているにもかかわらず、コンソールに出力がなく、ブレークポイントで実行が停止することはありません。その上、例外が発生することを期待して、構成ファイル (jaas.config) をクリアしましたが、Tomcat は正常に起動し、同じ認証動作が観察されます。
問題は、LoginModule と jaas 構成が確実に取得されるようにするにはどうすればよいかということです。Tomcat 7 JAASRealm にはデフォルトの LoginModule 実装がありますか?
どんな助けでも大歓迎です。
web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>app</web-resource-name>
<url-pattern>/pages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>auth</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>auth</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/loginFail.jsf</form-error-page>
</form-login-config>
</login-config>
jaas.config
secureApp {
com.mycompany.security.jaas.JPALoginModule required;
};
META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm" appName="secureApp"
userClassNames="com.mycompany.security.jaas.UserPrincipal" roleClassNames="com.mycompany.security.jaas.RolePrincipal" />
</Context>