我使用 j_security_check
作为 tomcat/tomEE 服务器上 JAAS 机制的一部分。
我目前有一个名为“admin”的上下文,它将登录过程作为一个单独的页面 (login.html),并且该登录页面的表单类似于:<form action="j_security_check" method="post">
使用适当的输入发送 j_username 和 j_password 属性。
一切正常。
为澄清起见,我的应用程序可在例如“www.myapp.com/admin”
现在我被要求在域“www.myapp.com”的根目录中添加另一个 Web 应用程序,所以我将其添加到我的 conf/server.xml
中:
`<Context
docBase="ROOT"
path=""
reloadable="true"
/>`
ROOT.war
包含需要在 www.myapp.com/
中的 webapp域路径。
我想做的是添加 j_security_check
该上下文的机制也是如此(出于用户体验的原因,它应该在 AJAX
而不是 <form>
中完成)。
请注意,我已经设法在两种情况下都有 cookie,但是当我制作 www.myapp.com/j_security_check
时打电话,我总是得到一个408 Request Timeout
响应。
如何执行 j_security_check
从我的应用程序的根上下文路径调用? (请不要使用外部登录页面)
最佳答案
问题是您没有遵循基于 FORM 的身份验证规则:您需要首先请求 protected 资源,然后让容器向您询问用户名和密码。身份验证成功后,容器会将您重定向到最初请求的资源。这在 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/
目录并让它自动部署。
关于tomcat - j_security_check 在 <上下文路径 =""> 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751642/