0

我的资源中有一个带有 @RequiresGuest 注释的方法。当登录用户点击链接时,它会正确地抛出一条UnauthenticatedException带有此消息的链接

尝试执行仅限访客的操作。当前主题不是来宾(他们已通过身份验证或从以前的登录中记住)。拒绝访问。

但是我该如何处理呢?例如,如何将请求重定向到注销页面?

4

1 回答 1

1

这通常取决于您选择的 MVC 框架:

  • 一些 UI 机制(例如 JSP)允许您拥有一个“错误页面”,您可以使用它来处理任何异常。
  • 更优雅的 UI 框架具有“捕获所有”异常处理程序和/或控制器,允许您做任何您想做的事情(检查异常、设置 HTTP 状态代码、将最终用户重定向到特定于该特定问题的错误页面等) .

但是,如果您不希望为此使用 MVC 机制,则可以创建一个 Servlet 过滤器来执行此操作:

过滤器将在 try/catch 块中执行 FilterChain,捕获 AuthorizationException。如果它捕获到一个,它会发出一个 302 重定向到“unauthorizedUrl”。

Shiro 的现有过滤器不这样做的原因是因为它们在调用 FilterChain 之前对 Subject 进行了授权:如果 Subject 不符合授权条件,则过滤器链甚至不会被调用(因此没有要捕获的 AuthorizationException)。

如果您想在 Shiro 中看到替代行为,请提交问题并将其作为潜在的新功能进行讨论。

于 2012-05-01T16:49:44.247 回答