我在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
调用? (请不要外部登录页面)
答案 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/
目录,然后让它自动部署。