Tomcat 6 用の Web アプリケーションを開発していますが、解決方法がわからない問題に直面しています。次の小さなシナリオを考えてみましょう。ユーザーとパスワードだけでなくユーザーを認証する必要があると想像してください。認証は、いくつかの追加条件 (ユーザー、パスワード、および IP アドレスの一致など) が真の場合にのみ許可されます。私が理解している限り、Tomcat はレルムの概念を導入しました。JDBCRealm
ユーザーとパスワードのペアは今までしかチェックされていなかったため、アプリケーションには単純なもので十分でした。ここで、IP アドレスも確認する必要があります。クラスを拡張する簡単なテスト クラスを作成しましたJDBCRealm
。
package security;
import org.apache.catalina.realm.JDBCRealm;
import org.apache.log4j.Logger;
import java.security.Principal;
import java.sql.Connection;
public class ApplicationRealm extends JDBCRealm {
protected final Logger logger = Logger.getLogger(this.getClass());
@Override
public synchronized Principal authenticate(Connection connection, String userName, String credentials) {
logger.info("custom realm test, the authentication will be failed just for testing");
return null;
}
}
そして、次を使用してこのレルムクラスをバインドしようとしましたcontext.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="security.ApplicationRealm" connectionName="${user}" connectionPassword="${password}"
connectionURL="${url}${database}" debug="99" driverName="${driver}" roleNameCol="role" userCredCol="pw"
userNameCol="login" userRoleTable="users_roles" userTable="users"/>
</Context>
Web アプリケーションのデプロイは成功しますが、ログイン ページにアクセスしようとすると、Tomcat から 404 ページが返されます (問題の原因はノードのclassName
属性にあると思われます)。Realm
HTTP Status 404 -
type Status report
message
description The requested resource () is not available.
Apache Tomcat/6.0.24
JDBCRealm
でカスタム子孫をバインドするにはどうすればよいcontext.xml
ですか? これに を使用しようとしているのは完全に間違っているのかもしれませんJDBCRealm
が、とにかく正しい解決策がわかりません。
前もって感謝します。