【问题标题】:j_security_check not working when <Context path="">当 <Context path=""> 时 j_security_check 不起作用
【发布时间】:2016-06-15 13:36:22
【问题描述】:

我在 tomcat/tomEE 服务器上使用j_security_check 作为 JAAS 机制的一部分。

我目前有一个名为“admin”的上下文,它具有作为单独页面 (login.html) 的登录过程,并且该登录页面具有类似于此的形式:&lt;form action="j_security_check" method="post"&gt; 带有正确的输入发送 j_username 和 j_password属性。

那里一切正常。

为澄清起见,我的应用程序可在例如访问“www.myapp.com/admin”

现在我被要求在域的根目录中添加另一个 webapp,“www.myapp.com”,所以我将它添加到我的 conf/server.xml

`<Context 
  docBase="ROOT" 
  path="" 
  reloadable="true" 
/>`

ROOT.war 包含需要在www.myapp.com/ 域路径中的 webapp。

我正在尝试将j_security_check 机制也添加到该上下文中(出于用户体验原因,它应该在AJAX 而不是&lt;form&gt; 中完成)。

请注意,我已经设法在两种情况下都有 cookie,但是当我拨打 www.myapp.com/j_security_check 电话时,我总是收到 408 Request Timeout 响应。

如何从应用的根上下文路径执行j_security_check 调用? (请不要使用外部登录页面)

【问题讨论】:

    标签: tomcat tomcat7 jaas openejb j-security-check


    【解决方案1】:

    问题在于您没有遵循基于 FORM 的身份验证规则:您需要首先请求受保护的资源,然后让容器向您询问用户名和密码。成功验证后,容器会将您重定向到最初请求的资源。这在Java Servlet Specification Version 3.0 的第 13.6.3 节中有介绍。如果您想处理路过式登录,您需要自己完成。 Servlet 3.0 在 HttpServletRequest 对象上有 login 方法,您可以将 AJAX 请求提交给您自己的 servlet 而不是 j_security_check

    请注意,server.xml 中的 &lt;Context&gt; 配置会导致无穷无尽的混乱,并且会在同一台服务器上部署您的 ROOT Web 应用程序两次。只需将ROOT.war 放入Tomcat 的webapps/ 目录并让它自动部署即可。

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2019-11-21
      • 2011-09-25
      相关资源
      最近更新 更多