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

jem*_*jem 4 apache authentication tomcat j-security-check

Apache tomcat版本:6.0.20

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

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

Chr*_*ltz 6

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

如果要捕获"禁止"条件,可以使用WEB-INF/web.xml中的<error-page>映射将用户发送到任何您想要的位置,包括登录页面.请记住,在上述条件为真之后,容器只接受登录,因此您可能必须先将用户登录(通过终止用户的会话).

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

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