java - 将具有自定义领域的 Web 应用程序部署到 Tomcat 6 后出现 HTTP 状态 404

标签 java tomcat6 jdbcrealm context.xml

我为 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 绑定(bind)这个领域类:

<?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

如何绑定(bind)自定义 JDBCRealm context.xml 的后代?也许我尝试使用 JDBCRealm 是完全错误的为此,但我无论如何都看不到正确的解决方案。

提前致谢。

最佳答案

领域部署不正确是问题的原因。而且,自定义领域在这里不合适。检查 IP 地址的最佳方法是编写一个可以访问 HTTP 请求的自定义表单 validator 。更改 web.xml 中的表单 validator 并部署它,完全满足了我的需要。它还消除了在每个请求上检查 IP 地址的要求,因为安全资源隐藏在授权“墙”后面 - 这意味着如果授权被授予,也意味着 IP 是有效的。感谢 JoseK 指出了一个好的解决方案。我只是对 Tomcat 中领域的概念有点困惑。

关于java - 将具有自定义领域的 Web 应用程序部署到 Tomcat 6 后出现 HTTP 状态 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566956/

相关文章:

java - 寻找字节码

java - 如何在 Titan 0.4 中禁用自动类型创建?

java - 系统找不到指定的文件 - Tomcat 6 上运行的 WEB-INF 配置文件

Tomcat REALM 在某些情况下不进行身份验证

jaas - 从 glassfish 4.0 迁移到 Glassfish 4.1.1 - JDBC 领域问题

java - 设置 Glassfish 不使用任何摘要算法

java - 为 Spring MVC Controller - AOP 或 Spring Security 的方法传递密码?

java - 如何从我的 Java 应用程序运行 Java 应用程序?

java - tomcat 6 终身内存问题

java - 什么是Tomcat ROOT应用,有什么优势?