【SpringSecurity】ログイン認証状況取得 より良い方法はないか
Discussion
ログイン認証取得でプチはまりしたので投稿します。
相談内容
- より良いログイン状況の取得方法はないでしょうか
- ログイン情報について参考になる記事などあればコメントお願いいたします
やりたいこと
SpringSecurity でログイン判定したい
こちらの記事
Spring Security 使い方メモ 認証・認可
にログイン認証済みかどうかは下記で取得できるとあったが、動かしたところログアウトしていても"true"が返ってきた。
import org.springframework.security.core.context.SecurityContextHolder;
...
Boolean login =
SecurityContextHolder.getContext().getAuthentication().isAuthenticated();
自分で試したこと
とりあえずログアウト・ログイン時の Authentication の値を確認
SecurityContextHolder.getContext().getAuthentication();
■ログアウト
AnonymousAuthenticationToken [
Principal=anonymousUser,
Credentials=[PROTECTED],
Authenticated=true,
Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1,
SessionId=95E129BF93F697FF3F30921ECC94D420],
Granted Authorities=[ROLE_ANONYMOUS]
]
.getName()の返り値 ... anonymousUser
■ログイン中 ユーザ名:test@test
UsernamePasswordAuthenticationToken [
Principal=org.springframework.security.core.userdetails.User [
Username=test@test,
Password=[PROTECTED],
Enabled=true, AccountNonExpired=true,
CredentialsNonExpired=true,
AccountNonLocked=true,
Granted Authorities=[ADMIN]
],
Credentials=[PROTECTED],
Authenticated=true,
Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1,
SessionId=95E129BF93F697FF3F30921ECC94D420],
Granted Authorities=[ADMIN]
]
.getName()の返り値 ... test@test
解決策1:getNameした値が"anonymousUser"かどうかで判定
// ログイン状況取得
String email = SecurityContextHolder.getContext().getAuthentication().getName();
if (!email.equals("anonymousUser")) {
// ログイン中
} else {
// 未ログイン
}
解決策2:Authentication が AnonymousAuthenticationToken のインスタンスかどうかで判定する。
@gongoro さんにコメントいただき追記しました。こちらを採用することにします!
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
// ログイン中
auth.getName(); // ユーザネームの取得
...
}
その他
ログアウト時にセッションを削除する方法があるみたい(今度追記します。)
参考
0