4

Apache tomcat 版本:6.0.20

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

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

4

1 回答 1

6

这种行为是正常的:当用户请求受保护的资源并且用户尚未提供凭据时,servlet 规范仅列出了容器管理的身份验证(即登录)的过程。所有其他情况都未定义,包括您的情况。

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

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

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

于 2012-05-31T11:34:02.763 回答