【问题标题】:How to handle UnauthenticatedException with Shiro如何用 Shiro 处理 UnauthenticatedException
【发布时间】:2012-05-02 00:49:44
【问题描述】:

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

正在尝试执行仅限访客的操作。当前的主题是 不是客人(他们已经过身份验证或从 以前的登录)。访问被拒绝。

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

【问题讨论】:

    标签: shiro guice-3


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 在 Shiro 1.2.1 中,任何 Shiro 异常都会被包装到一个通用的 ServletException 中。请参阅 AbstractShiroFilter.doFilterInternal。所以在你的过滤器中捕获 ShiroException 是行不通的。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2013-06-28
    • 2014-07-26
    • 2012-11-30
    • 2022-01-22
    • 2013-04-20
    • 2012-08-05
    • 2012-11-06
    相关资源
    最近更新 更多