2012-04-26 38 views
0

我在@RequiresGuest注解的资源中有一个方法。当登录用户点击链接它正确地抛出一个UnauthenticatedException与此消息如何使用Shiro处理UnauthenticatedException

试图执行guest-only操作。当前主题是 不是客人(他们已经从 以前的登录身份验证或记住)。拒绝访问。

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

回答

1

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

  • 一些UI机制(例如JSP),让你有一个“错误页面”,你可以用它来处理任何异常。
  • 更优雅的UI框架已经“所有”异常处理程序和/或控制器,让你做你想要(检查异常,设置一个HTTP状态代码,最终用户重定向到特定于该特定问题上的错误页面什么等)。

但是,如果你不希望使用MVC机制对于这一点,就可以创建一个Servlet过滤器,将做到这一点:

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

原因四郎现有的过滤器不这样做是因为他们授权过调用FilterChain前的主题: 如果主题不符合授权条件,过滤链甚至从未调用(因此不存在AuthorizationException来捕获)。

如果你想看到四郎替代行为,请提交一份issue,并讨论了作为一个潜在的新功能。

+0

在Shiro 1.2.1中,任何Shiro异常都被封装到泛型的ServletException中。请参阅AbstractShiroFilter.doFilterInternal。因此,在您的过滤器中捕获ShiroException将无法工作。 – 2012-11-29 11:51:55