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
私は困惑しています。助けてくれてありがとう。さらに情報が必要な場合はお知らせください。