【问题标题】:Form authentication with Tomcat使用 Tomcat 进行表单身份验证
【发布时间】:2011-06-12 22:09:46
【问题描述】:

我正在尝试使用 Tomcat 实现基于表单的身份验证。我所有的安全 servlet 都映射在 mydomain/myapp 下。我可以通过遵循基本教程并指定 login 和 login_failed 页面来保护此目录。

我的问题是我想要一个不安全的 mydomain/index.html 包含用户名/密码表单,以便访问者可以从那里登录。到目前为止我最好的尝试没有奏效:

<form method="POST" action="myapp/">
  Username: <input type="text" name="j_username"> <br/> 
  Password: <input type="password" name="j_password">
  <input type="submit" value="Login">
</form>

有什么建议吗?

编辑:身份验证的工作原理是,如果您尝试访问 mydomain/myapp,您将被重定向到登录页面。我不明白的是如何允许用户登录而不首先尝试访问受保护的页面。

【问题讨论】:

  • 你说它不起作用是什么意思?

标签: java authentication tomcat servlets


【解决方案1】:

阅读servlet specicification 的第 13.5.3.1 段。它说 : “为了正确进行身份验证,登录表单的操作 必须始终为 j_security_check"。

因此,您必须更改登录表单的操作。它必须是 j_security_check。

【讨论】:

  • 当用户尝试访问 mydomain/myapp 时,他们会被重定向到登录页面,并使用 j_security_check 表单,一切正常。但是如何将登录表单放在 mydomain/index.html 上,以便可以对其进行身份验证并将其重定向到安全部分?
【解决方案2】:

当用户尝试访问您的安全资源(securedPage.jsp)时,他们将被带到您的登录页面(例如 login.jsp)。他们将输入用户名和密码,然后单击“提交”。表单将使用操作 j_security_check 提交。这就是 Container 提供的。所以如果登录成功,用户将被重定向到securedPage.jsp,否则他将被重定向到错误页面,你也有

【讨论】:

    【解决方案3】:

    在您声明安全性的web.xml 中,您应该为两者声明它, 安全资源和开放资源。

    仅在声明开放资源时 你不写'aut-constraint'标签

    例如安全资源:

     <security-constraint>
        <web-resource-collection>
            <web-resource-name>restricted</web-resource-name>
            <url-pattern>/*</url-pattern>           
        </web-resource-collection>
    
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    

    对于开放资源:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>open</web-resource-name>
            <url-pattern>/path/to/open/resource</url-pattern>           
        </web-resource-collection>
    </security-constraint>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多