Spring MVC、Tiles、Shiro を使用しています。
これは、私のauthorizedUrlプロパティがどのように構成されているかです:
<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()シロを にリダイレクトさせることはできません/unauthorized。常にフィルタ チェーンを続行し、@Controller;で POST メソッドを実行します。もちろん、代わりにリダイレクトを期待しています。
これが私のものwebapp-context.xmlです:
http://pastebin.com/XZaCKqEC
そして、これが私のものweb.xmlです:
http://pastebin.com/5H81Tm8A
以下は、Shiro からの TRACE ログ出力の一部です。にアクセスしようとすると、Shiro が動作します/lists。ただし、ログインフォームが送信されると、リダイレクト/unauthorizedは発生しません。ログインの送信が検出されることに注意してください:
http://pastebin.com/ZEK3CTdJ
そのため、ログインの送信は検出されますが、元のフィルター チェーンは、リダイレクトする代わりに実行されます。/unauthorized
私は困惑しています。助けてくれてありがとう。さらに情報が必要な場合はお知らせください。