【问题标题】:HTTP Status 404 after deploying a web application with a custom realm to Tomcat 6将具有自定义领域的 Web 应用程序部署到 Tomcat 6 后的 HTTP 状态 404
【发布时间】:2010-08-25 14:33:59
【问题描述】:

我为 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页面(我怀疑问题的根源是Realm节点中的className属性):

HTTP Status 404 -
type Status report
message
description The requested resource () is not available.
Apache Tomcat/6.0.24

如何在context.xml 中绑定自定义JDBCRealm 后代?也许我尝试使用 JDBCRealm 是完全错误的,但我还是看不到正确的解决方案。

提前致谢。

【问题讨论】:

  • 检查日志中的堆栈跟踪。
  • 日志中有什么内容? (tomcat/日志)
  • @Thorbjørn Ravn Andersen ,我之前尝试检查日志,但似乎没有任何内容写入日志。
  • @Bozho 不幸的是什么都没有。 Tomcat 未向日志报告此错误。
  • 不是开箱即用的。我真的不确定这是否是个好主意 - 但您可以查看此 Valve java2s.com/Open-Source/Java-Document/Sevlet-Container/… 的源代码,它显示了如何与数据库交互。这是为了将访问日志写入表中。

标签: java tomcat6 jdbcrealm context.xml


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 2015-10-18
    • 2016-07-17
    • 1970-01-01
    • 2014-10-15
    • 2010-10-17
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多