如何使用Shiro处理UnauthenticatedException

时间:2012-04-26 22:18:59

标签: shiro guice-3

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

  

尝试执行仅限访客操作。目前的主题是   不是客人(他们已被认证或记住了   以前登录)。访问被拒绝。

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

1 个答案:

答案 0 :(得分:1)

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

  • 某些UI机制(例如JSP)允许您拥有可用于处理任何异常的“错误页面”。
  • 更优雅的UI框架具有'捕获所有'异常处理程序和/或控制器,允许您执行任何操作(检查异常,设置HTTP状态代码,将最终用户重定向到特定于该特定问题的错误页面)等等)。

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

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

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

如果您希望在Shiro中看到其他行为,请提交issue并将其作为潜在的新功能进行讨论。