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