1概要

このクイック記事では、Spring SecurityとSpring MVCで認証されたユーザをプログラムで設定する方法に焦点を当てます。


2春のセキュリティ

簡単に言うと、Spring Securityは、認証された各ユーザのプリンシパル情報を、

Authentication

オブジェクトとして表される

ThreadLocal

に保持します。

この

Authentication

オブジェクトを構築および設定するには、Spring Securityが標準の認証に基づいてオブジェクトを構築するために通常使用するのと同じアプローチを使用する必要があります。

これを行うには、手動で認証をトリガーしてから、結果の

Authentication

オブジェクトを、現在ログインしているユーザーを保持するためにフレームワークで使用されている現在の

SecurityContext

に設定します。

UsernamePasswordAuthenticationToken authReq
 = new UsernamePasswordAuthenticationToken(user, pass);
Authentication auth = authManager.authenticate(authReq);
SecurityContext sc = SecurityContextHolder.getContext();
securityContext.setAuthentication(auth);


Authentication

をコンテキストに設定した後は、

securityContext.getAuthentication()。isAuthenticated()

を使用して現在のユーザーが認証されているかどうかを確認できます。


3春MVC

デフォルトでは、Spring SecurityはSpring Securityフィルタチェーンに追加のフィルタを追加する – これはセキュリティコンテキスト(

SecurityContextPersistenceFilter

クラス)を永続化することができる。

次に、セキュリティコンテキストの永続性を

SecurityContextRepository

のインスタンスに委任します。デフォルトでは

HttpSessionSecurityContextRepository

クラスになります。

そのため、リクエストに認証を設定し、クライアントからの以降のすべてのリクエストで認証を使用できるようにするには、HTTPセッションで

Authentication

を含む

SecurityContext

を手動で設定する必要があります。

public void login(HttpServletRequest req, String user, String pass) {
    UsernamePasswordAuthenticationToken authReq
      = new UsernamePasswordAuthenticationToken(user, pass);
    Authentication auth = authManager.authenticate(authReq);

    SecurityContext sc = SecurityContextHolder.getContext();
    sc.setAuthentication(auth);
    HttpSession session = req.getSession(true);
    session.setAttribute(SPRING__SECURITY__CONTEXT__KEY, sc);
}


SPRING

SECURITY

CONTEXT

KEY

は、静的にインポートされた

HttpSessionSecurityContextRepository.SPRING

SECURITY

CONTEXT

KEY

です。


HttpSessionSecurityContextRepository

は__SecurityContextPersistenceFilterと連携して機能するため、直接使用することはできません。

これは、フィルタがチェーン内の残りの定義済みフィルタの実行前後にセキュリティコンテキストをロードおよび格納するためにリポジトリを使用するためですが、チェーンに渡される応答に対してカスタムラッパーを使用するためです。

したがって、この場合は、使用されているラッパーのクラス・タイプを知っていて、それをリポジトリー内の適切なsaveメソッドに渡す必要があります。


4結論

このクイックチュートリアルでは、Spring Securityのコンテキストでユーザー

Authentication

を手動で設定する方法と、それを実現するための最も簡単な方法を示すコードサンプルを中心に、Spring MVCの目的でユーザーを利用可能にする方法について説明しました。

いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/spring-security-mvc-custom[over on GitHub]にあります。