Spring Securityでユーザーを手動で認証する方法
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]にあります。