0

私は、ユーザーがログインしているかどうかをチェックしたいと思います。ほとんどのプロジェクトで、ユーザーがログインしているかどうかを確認するためにインターセプターを統合しました。しかしこれは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リクエストの両方でうまく動作する汎用インターセプタを作成するにはどうすればよいですか?そして、これはログイン要求を監視する標準的な方法ですか?

+0

「うまく動作しない」とはどういう意味ですか?エラーや予期しない結果が出ていますか?あなたは正確な問題は何であると言うことができますか? – devbd

+0

@devbdまず、ajaxはJSONをリクエストします。インターセプタが認証ページにどのようにリダイレクトするのでしょうか。 2番目はmatchAll()のインターセプターを適用すると、/ static/**もフィルターに掛かります。ユーザーがログに記録されているかどうかをチェックするための適切な解決策ではないと思います。 –

+0

JSコードでAjaxリクエストとともに 'redirect'を処理する必要があります。次に、正確に '/ static/**'に一致するURLがあるかどうかを確認してください。 '/ static/**'のようなURLはまったくないと思います。 – devbd

答えて

0

スプリングセキュリティプラグインを使用している場合。セキュリティ設定を構成することでそれを行うことができます。もっと見つけることができますhere

ajaxリクエストでは、戻りコードをチェックでき、== 403の場合、ユーザーをログインページにリダイレクトできます。

+0

ajaxリクエストの場合:403ページが無許可の場合。私のajaxリクエスト---- POSTXHR http:// localhost:8080/home/index2 get me -------> [HTTP/1.1 302 Found 4ms] GETXHR http:// localhost: 8080/login/authAjax –

+0

@ujjwolshresthaので、login/authAjaxにリダイレクトされます。 docsの 'adh.ajaxErrorPage'プロパティを見ることができます。多分それはあなたを助けるでしょう。 – Koloritnij

関連する問題