我正在使用 Spring MVC、Tiles 和 Shiro。
这是我的未授权Url 属性的配置方式:
<property name="unauthorizedUrl" value="/unauthorized"/>
我的期望是,当MyAuthorizingRealm
发现无效凭据时,Shiro 将重定向到/unauthorized
.
但是,我在提交表单时不会发生这种情况。我有一个@Controller
映射到处理 GET 和 POST 操作的登录名/login
。对于对 url/lists
的访问,将显示登录表单。所以它似乎在一种情况下有效,但在另一种情况下无效。
@Controller
@RequestMapping(value = "/login")
public class LoginController {
@RequestMapping(method = RequestMethod.GET)
public String getLoginFormView(Model model) {
return "login";
}
// if this method doesn't exist a Post not supported exception is thrown
@RequestMapping(method = RequestMethod.POST)
public String handlePost() {
return "this view doesn't exist";
}
}
即使我扔出我仍然AuthenticationException
无法MyAuthorizingRealm.doGetAuthenticationInfo()
让 Shiro 重定向到/unauthorized
. 它总是以继续过滤器链结束并在@Controller
;中执行 POST 方法。当然,我希望重定向。
这是我的:http webapp-context.xml
:
//pastebin.com/XZaCKqEC
这是我的:http web.xml
:
//pastebin.com/5H81Tm8A
以下是 Shiro 的一些 TRACE 日志输出。当您尝试访问时,Shiro 工作/lists
。但是,当登录表单提交时,重定向/unauthorized
永远不会发生。注意,检测到登录提交:http:
//pastebin.com/ZEK3CTdJ
因此,检测到登录提交,但无论如何都会执行原始过滤器链而不是重定向到/unauthorized
我难住了。非常感谢您的帮助,如果您需要更多信息,请告诉我。