我的资源中有一个带有 @RequiresGuest 注释的方法。当登录用户点击链接时,它会正确地抛出一条UnauthenticatedException
带有此消息的链接
尝试执行仅限访客的操作。当前主题不是来宾(他们已通过身份验证或从以前的登录中记住)。拒绝访问。
但是我该如何处理呢?例如,如何将请求重定向到注销页面?
这通常取决于您选择的 MVC 框架:
但是,如果您不希望为此使用 MVC 机制,则可以创建一个 Servlet 过滤器来执行此操作:
过滤器将在 try/catch 块中执行 FilterChain,捕获 AuthorizationException。如果它捕获到一个,它会发出一个 302 重定向到“unauthorizedUrl”。
Shiro 的现有过滤器不这样做的原因是因为它们在调用 FilterChain 之前对 Subject 进行了授权:如果 Subject 不符合授权条件,则过滤器链甚至不会被调用(因此没有要捕获的 AuthorizationException)。
如果您想在 Shiro 中看到替代行为,请提交问题并将其作为潜在的新功能进行讨论。