apache - 如果用户已经登录,则 j_security_check 不可用

标签 apache authentication tomcat j-security-check

Apache tomcat 版本:6.0.20

如果用户已经登录,并且他尝试从登录页面再次登录,则会遇到 j_security_check 不可用错误。这是正常行为还是我必须做些什么?

实际上我有不同的用户角色来访问不同的页面,当拒绝特定用户访问页面时,我想将他重定向到登录页面,在那里他可以使用相应的凭据登录。

最佳答案

这种行为是正常的:servlet 规范仅在用户请求 protected 资源且用户尚未提供凭据时列出容器管理的身份验证(即登录)过程。所有其他场景均未定义,包括您的场景。

如果您想捕获“禁止”条件,您可以在 WEB-INF/web.xml 中使用 映射将用户发送到您想要的任何位置,包括登录页面。请记住,容器只会在满足上述条件后才接受登录,因此您可能必须先将用户注销(通过终止用户 session )。

我可能会推荐一个“禁止”页面,上面写着“您无权访问此资源。如果您想以其他用户身份登录以访问它,请单击 [HERE]”,其中[HERE] 是指向 servlet 的链接,它终止用户的 session ,然后重定向到用户试图访问的资源。这将导致容器请求身份验证(即呈现登录表单)、验证凭据并将用户发送到所需资源。

如果您使用容器(和 webapp)以及 servlet 规范的 3.0 版,则有一个新的 HttpServletRequest.login() 方法可用于以编程方式将用户登录到您的 webapp。您也许可以使用它来代替终止 session 并执行所有这些重定向...相反,您可以自己收集用户名和密码,然后让容器为您进行登录。

关于apache - 如果用户已经登录,则 j_security_check 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10828280/

相关文章:

security - 使用证书的服务器身份验证(过程)

java - 尝试加载外部库会杀死 JRE

tomcat - 每次更改应用程序后都必须重新启动 TomCat

java.lang.ClassNotFoundException : com. sun.faces.config.ConfigureListener 在 NetBeans 7.0.1 中部署时出错

java - Luke - 当前位置没有有效的目录

php - PHP 证书。两种方式的身份验证 ssl。 Apache

apache - 502 Bad Gateway nginx/1.11.5 在 docker 中运行

apache - 错误 503 服务不可用 - Varnish 缓存

authentication - Rails 4 - 故障安全响应期间出错 : undefined method 'authenticate' for nil:NilClass

authentication - 后端应用程序如何验证 JavaScript 框架应用程序发送的 JWT token ?