私は、ユーザーがログインしているかどうかをチェックしたいと思います。ほとんどのプロジェクトで、ユーザーがログインしているかどうかを確認するためにインターセプターを統合しました。しかしこれはAJAXリクエストではうまく動作せず、インターセプタ内のすべてのコントローラを照合すると、/ static/**を含むすべてのコントローラにフィルタが適用されます。この場合、除外する必要があります(.excludes(uri: "/静的/ ** "))。これは正しいと標準的なやり方ですか?ユーザがgrails Spring Securityにログインしているかどうかを確認する最も良い方法は何ですか?
LoginInterceptor() {
matchAll()
.excludes(controller: "login")
.excludes(controller: "signUp")
.excludes(uri: "/static/**")
.excludes(uri: "/assets/**")
}
boolean before() {
if (!springSecurityService.isLoggedIn()) {
flash.message="You need to login to access furthur pages"
redirect(controller: 'login',action: 'auth');
return false
}
true
}
boolean after() { true }
void afterView() {
// no-op
}
上記のコードはAJAXリクエストでは機能しません。 AJAXリクエストとWEBリクエストの両方でうまく動作する汎用インターセプタを作成するにはどうすればよいですか?そして、これはログイン要求を監視する標準的な方法ですか?
「うまく動作しない」とはどういう意味ですか?エラーや予期しない結果が出ていますか?あなたは正確な問題は何であると言うことができますか? – devbd
@devbdまず、ajaxはJSONをリクエストします。インターセプタが認証ページにどのようにリダイレクトするのでしょうか。 2番目はmatchAll()のインターセプターを適用すると、/ static/**もフィルターに掛かります。ユーザーがログに記録されているかどうかをチェックするための適切な解決策ではないと思います。 –
JSコードでAjaxリクエストとともに 'redirect'を処理する必要があります。次に、正確に '/ static/**'に一致するURLがあるかどうかを確認してください。 '/ static/**'のようなURLはまったくないと思います。 – devbd