カスタム レルムを持つ Web アプリケーションを Tomcat 6 にデプロイした後の HTTP ステータス 404
-
01-10-2019 - |
質問
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
これについては、しかし、とにかく正しい解決策がわかりません。
前もって感謝します。
解決
レルムの不適切なデプロイメントが問題の原因でした。さらに、カスタム レルムはここには適していません。IP アドレスを確認する最良の方法は、HTTP リクエストにアクセスできるカスタム フォーム認証システムを作成することです。でのフォーム認証システムの変更 web.xml
, 、そしてそれをデプロイすると、まさに必要なものが可能になりました。また、安全なリソースが認証「壁」の背後に隠されているため、リクエストごとに IP アドレスをチェックする必要がなくなります。これは、認証が許可された場合、IP が有効であることを意味します。良い解決策を教えてくれた JoseK に感謝します。Tomcat のレルムの概念に少し混乱しました。