[解決済み] SpringでSession Objectを取得するには?
2023-04-05 21:42:57
質問内容
私は比較的新しい 春 とSpringのセキュリティに詳しいです。
Spring securityを使って、サーバー側でユーザー認証を行う必要があるプログラムを書こうとしていました。
というのを思いつきました。
public class CustomAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider{
@Override
protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken)
throws AuthenticationException
{
System.out.println("Method invoked : additionalAuthenticationChecks isAuthenticated ? :"+usernamePasswordAuthenticationToken.isAuthenticated());
}
@Override
protected UserDetails retrieveUser(String username,UsernamePasswordAuthenticationToken authentication) throws AuthenticationException
{
System.out.println("Method invoked : retrieveUser");
//so far so good, i can authenticate user here, and throw exception if not authenticated!!
//THIS IS WHERE I WANT TO ACCESS SESSION OBJECT
}
}
私の使用例では、ユーザが認証されたときに、次のような属性を配置する必要があります。
session.setAttribute("userObject", myUserObject);
myUserObjectはあるクラスのオブジェクトで、複数のユーザーからのリクエストに対してサーバーコード全体でアクセスすることができます。
どのように解決するのですか?
あなたの友人は、ここで
org.springframework.web.context.request.RequestContextHolder
// example usage
public static HttpSession session() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession(true); // true == allow create
}
これは標準的なspring mvcのディスパッチサーブレットによって生成されます。
org.springframework.web.filter.RequestContextFilter
の中にフィルターとして
web.xml
をフィルタリングしてホルダーを管理します。
EDIT
: 余談ですが、あなたは実際に何をしようとしているのでしょうか?
HttpSession
の中にある
retieveUser
メソッドの
UserDetailsService
. Spring securityはどのようにしてもUserDetailsオブジェクトをセッションに置いてくれます。にアクセスすることで、それを取得することができます。
SecurityContextHolder
:
public static UserDetails currentUserDetails(){
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
if (authentication != null) {
Object principal = authentication.getPrincipal();
return principal instanceof UserDetails ? (UserDetails) principal : null;
}
return null;
}
関連
-
[解決済み] SecurityContextにAuthenticationオブジェクトが見つかりませんでした - Spring 3.2.2
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Spring Securityによるユニットテスト
-
[解決済み] 複数のBeanが見つかった場合、Springはどのように名前による自動配線を行うのですか?
-
[解決済み] 同じurlパターンに対して異なる引数で2つのメソッドを作成する
-
[解決済み] kotlinで@Autowiredのようなspringアノテーションを使用する方法とは?
-
[解決済み] Springは@Autowiredアノテーションを付けずにコンストラクタに依存性を注入する
-
[解決済み] Spring AOP: JoinPointとPointCutの違いは何ですか?
-
[解決済み] URI [/WEB-INF/pages/apiForm.jsp] を持つ HTTP リクエストのマッピングが見つかりません [重複]。
-
[解決済み] Spring Cloud Eureka Server の自己保存と更新閾値を理解する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] Spring @PostConstruct と init-method 属性の比較
-
[解決済み] Maven依存性 spring-webとspring-webmvcの比較
-
[解決済み] 同じurlパターンに対して異なる引数で2つのメソッドを作成する
-
[解決済み] なぜ春になると静電場が自動化されないのか?
-
[解決済み] Spring DAOとSpring ORMとSpring JDBCの比較
-
[解決済み] Spring CORS 'Access-Control-Allow-Origin' ヘッダが存在しない。
-
[解決済み] Map または Properties オブジェクトとしてすべての環境プロパティにアクセスする
-
[解決済み] RestTemplateを使ったヘッダ付きHTTP get
-
[解決済み] Springの自動配線からサブパッケージを除外する?