@ExceptionHandlerを使用してSpringセキュリティ認証の例外を処理する

ニコラ

私は春のMVCのを使用しています@ControllerAdviceし、@ExceptionHandlerREST APIをすべての例外を処理します。Web MVCコントローラーによってスローされた例外に対しては正常に機能しますが、コントローラーメソッドが呼び出される前に実行されるため、SpringSecurityカスタムフィルターによってスローされた例外に対しては機能しません。

トークンベースの認証を行うカスタムスプリングセキュリティフィルターがあります。

public class AegisAuthenticationFilter extends GenericFilterBean {

...

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        try {

            ...         
        } catch(AuthenticationException authenticationException) {

            SecurityContextHolder.clearContext();
            authenticationEntryPoint.commence(request, response, authenticationException);

        }

    }

}

このカスタムエントリポイントの場合:

@Component("restAuthenticationEntryPoint")
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{

    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authenticationException.getMessage());
    }

}

そして、このクラスを使用して、例外をグローバルに処理します。

@ControllerAdvice
public class RestEntityResponseExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler({ InvalidTokenException.class, AuthenticationException.class })
    @ResponseStatus(value = HttpStatus.UNAUTHORIZED)
    @ResponseBody
    public RestError handleAuthenticationException(Exception ex) {

        int errorCode = AegisErrorCode.GenericAuthenticationError;
        if(ex instanceof AegisException) {
            errorCode = ((AegisException)ex).getCode();
        }

        RestError re = new RestError(
            HttpStatus.UNAUTHORIZED,
            errorCode, 
            "...",
            ex.getMessage());

        return re;
    }
}

私がする必要があるのは、春のセキュリティAuthenticationExceptionの場合でも詳細なJSON本文を返すことです。Spring SecurityAuthenticationEntryPointとSpringMVC @ExceptionHandlerを連携させる方法はありますか?

Spring Security3.1.4とSpringMVC3.2.4を使用しています。

ニコラ

OK、AuthenticationEntryPointから自分でjsonを書いてみましたが、うまくいきました。

テストのために、response.sendErrorを削除してAutenticationEntryPointを変更しました

@Component("restAuthenticationEntryPoint")
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{

    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException {

        response.setContentType("application/json");
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        response.getOutputStream().println("{ \"error\": \"" + authenticationException.getMessage() + "\" }");

    }
}

このようにして、Spring Security AuthenticationEntryPointを使用している場合でも、401と一緒にカスタムjsonデータを無許可で送信できます。

明らかに、テスト目的で行ったようにjsonをビルドすることはありませんが、いくつかのクラスインスタンスをシリアル化します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MATLABのurlreadコマンドを使用して無効なセキュリティ証明書を処理する

分類Dev

Spring LDAP APIを使用し、Springセキュリティを使用せずにLDAPを使用して認証する

分類Dev

Pythonを使用してyumのセキュリティ更新を確認する

分類Dev

kerberos / spnego認証を使用した春のセキュリティ

分類Dev

セキュリティ:APIを介して処理する2つのアプリ

分類Dev

Airflow-RESTAPIのセキュリティ認証を使用する方法

分類Dev

Springのセキュリティ:WSDLドキュメントを認証の必要から除外する

分類Dev

xml構成ファイル、JAVA、Springセキュリティを使用してLDAPでユーザーを認証する方法

分類Dev

Springセキュリティ-CSRFのみ、認証は不要(XML構成を使用)

分類Dev

ヘッダーで渡されたpingアクセスとユーザー名を使用してSpringセキュリティを使用して事前認証されたLDAPユーザーを認証するにはどうすればよいですか?

分類Dev

ファイルシステム処理のセキュリティレイヤーとしてDjangoRestFrameworkを使用する

分類Dev

どのように私は春のセキュリティでGoogle OIDCを使用してユーザーを認証することができます5.1+

分類Dev

サーバー側からSpringセキュリティを認証する

分類Dev

リクエストを使用してURLにアクセスする際のWindows認証の処理

分類Dev

春のセキュリティでクッキーを使用して基本認証を行う方法は?

分類Dev

VBAを使用してWebサイトのセキュリティ証明書の警告をバイパスする

分類Dev

Seq API:統合セキュリティを使用した認証?

分類Dev

フロントエンドでAWScongnito認証を使用したSpringセキュリティの実装

分類Dev

セキュリティを念頭に置いてAngularページの更新を処理する方法

分類Dev

次の認証プロバイダーを介してBadCredentialExceptionを持つユーザーを認証するためのSpringセキュリティを防止します

分類Dev

Spring Security-ログインページを取得すると、セキュリティは認証を試みて401エラーを返します

分類Dev

Firestoreのセキュリティルール:array_containsを使用して承認を決定する

分類Dev

Spring Web セキュリティで URL の前にワイルドカードを使用してリクエストを承認する

分類Dev

Springセキュリティoauthを使用して、カスタムOAuthプロバイダーを使用して、[authorization_request_not_found]を取得しました。コールバックメソッドを自分で処理する必要がありますか?

分類Dev

どのタイプの認証セキュリティがOdoo10を実装していますか

分類Dev

カスタム認証を使用してSpring5でAuthenticationExceptionを処理する

分類Dev

スプリングセキュリティを使用してLdap認証を実現する方法(スプリングブート)

分類Dev

認証にSpringセキュリティプリンシパルオブジェクトを使用する場合のSpringRestControllerのIllegalArgumentException

分類Dev

log4jを使用してWildflyのSpringセキュリティのロギングを有効にする

Related 関連記事

  1. 1

    MATLABのurlreadコマンドを使用して無効なセキュリティ証明書を処理する

  2. 2

    Spring LDAP APIを使用し、Springセキュリティを使用せずにLDAPを使用して認証する

  3. 3

    Pythonを使用してyumのセキュリティ更新を確認する

  4. 4

    kerberos / spnego認証を使用した春のセキュリティ

  5. 5

    セキュリティ:APIを介して処理する2つのアプリ

  6. 6

    Airflow-RESTAPIのセキュリティ認証を使用する方法

  7. 7

    Springのセキュリティ:WSDLドキュメントを認証の必要から除外する

  8. 8

    xml構成ファイル、JAVA、Springセキュリティを使用してLDAPでユーザーを認証する方法

  9. 9

    Springセキュリティ-CSRFのみ、認証は不要(XML構成を使用)

  10. 10

    ヘッダーで渡されたpingアクセスとユーザー名を使用してSpringセキュリティを使用して事前認証されたLDAPユーザーを認証するにはどうすればよいですか?

  11. 11

    ファイルシステム処理のセキュリティレイヤーとしてDjangoRestFrameworkを使用する

  12. 12

    どのように私は春のセキュリティでGoogle OIDCを使用してユーザーを認証することができます5.1+

  13. 13

    サーバー側からSpringセキュリティを認証する

  14. 14

    リクエストを使用してURLにアクセスする際のWindows認証の処理

  15. 15

    春のセキュリティでクッキーを使用して基本認証を行う方法は?

  16. 16

    VBAを使用してWebサイトのセキュリティ証明書の警告をバイパスする

  17. 17

    Seq API:統合セキュリティを使用した認証?

  18. 18

    フロントエンドでAWScongnito認証を使用したSpringセキュリティの実装

  19. 19

    セキュリティを念頭に置いてAngularページの更新を処理する方法

  20. 20

    次の認証プロバイダーを介してBadCredentialExceptionを持つユーザーを認証するためのSpringセキュリティを防止します

  21. 21

    Spring Security-ログインページを取得すると、セキュリティは認証を試みて401エラーを返します

  22. 22

    Firestoreのセキュリティルール:array_containsを使用して承認を決定する

  23. 23

    Spring Web セキュリティで URL の前にワイルドカードを使用してリクエストを承認する

  24. 24

    Springセキュリティoauthを使用して、カスタムOAuthプロバイダーを使用して、[authorization_request_not_found]を取得しました。コールバックメソッドを自分で処理する必要がありますか?

  25. 25

    どのタイプの認証セキュリティがOdoo10を実装していますか

  26. 26

    カスタム認証を使用してSpring5でAuthenticationExceptionを処理する

  27. 27

    スプリングセキュリティを使用してLdap認証を実現する方法(スプリングブート)

  28. 28

    認証にSpringセキュリティプリンシパルオブジェクトを使用する場合のSpringRestControllerのIllegalArgumentException

  29. 29

    log4jを使用してWildflyのSpringセキュリティのロギングを有効にする

ホットタグ

アーカイブ