<context path =“”>时j_security_check无法正常工作

时间:2016-03-02 15:36:37

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

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

我目前有一个名为“admin”的上下文,它将登录过程作为一个单独的页面(login.html),并且该登录页面有一个类似于此的表单:<form action="j_security_check" method="post">具有发送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/域路径中的网络应用。

我要做的是将j_security_check机制添加到该上下文中(出于UX原因,应该在AJAX而不是<form>中完成)。

请注意,我已设法在两个上下文中都使用Cookie,但当我拨打www.myapp.com/j_security_check时,我总是收到408 Request Timeout响应。

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

1 个答案:

答案 0 :(得分:1)

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

请注意,<Context>中的server.xml配置会导致无休止的混乱,并会在同一台服务器上部署两次ROOT Web应用程序。只需将ROOT.war放入Tomcat的webapps/目录,然后让它自动部署。