質問するログイン新規登録

質問編集履歴

3

解決方法を記載しました。

2018/06/04 04:44

投稿

koronatail
koronatail

スコア433

title CHANGED
File without changes
body CHANGED
@@ -8,4 +8,47 @@
8
8
  ###追記
9
9
  可能であればブラウザを閉じていたとしてもそれを判断させたいです。
10
10
  ログインを行なうシステムを想定しているため、ブラウザを閉じても次回ログイン時に前回のセッションIDを利用して判断は可能かと考えましたが、これでは次にログインしてくれない限りログが残らなくなってしまいます。
11
- 何か他の方法があればご教示願います。
11
+ 何か他の方法があればご教示願います。
12
+
13
+ ###解決方法
14
+ LogoutListener.javaを作成
15
+ ```java
16
+ package co.jp.health.common.config;
17
+
18
+ import java.util.List;
19
+
20
+ import org.springframework.context.ApplicationListener;
21
+ import org.springframework.security.core.context.SecurityContext;
22
+ import org.springframework.security.core.session.SessionDestroyedEvent;
23
+ import org.springframework.security.core.userdetails.UserDetails;
24
+ import org.springframework.stereotype.Component;
25
+
26
+ @Component
27
+ public class LogoutListener implements ApplicationListener<SessionDestroyedEvent> {
28
+
29
+ @Override
30
+ public void onApplicationEvent(SessionDestroyedEvent event)
31
+ {
32
+ System.out.println("onApplicationEvent が呼ばれました" + event.toString());
33
+ List<SecurityContext> lstSecurityContext = event.getSecurityContexts();
34
+ UserDetails ud;
35
+ for (SecurityContext securityContext : lstSecurityContext)
36
+ {
37
+ ud = (UserDetails) securityContext.getAuthentication().getPrincipal();
38
+ // ...
39
+ }
40
+ }
41
+
42
+ }
43
+
44
+ ```
45
+ WebSecurityConfigurerAdapterを継承したクラスに以下の記述を追加
46
+ ```java
47
+ @Bean
48
+ public DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher() {
49
+ return new DefaultAuthenticationEventPublisher();
50
+ }
51
+ ```
52
+
53
+ この記述をすることで、セッションタイムアウト時にLogoutListenerクラスのonApplicationEventが呼ばれました。
54
+ セッションタイムアウトが起きたタイミングで正確に呼ばれるわけではありませんが、引数のeventにセッションタイムアウトがおきた際のタイムスタンプが記録されていたのでこれでタイムアウトの時間を判断できました。

2

ログインで判断する際の問題点を追記

2018/06/04 04:44

投稿

koronatail
koronatail

スコア433

title CHANGED
File without changes
body CHANGED
@@ -7,4 +7,5 @@
7
7
 
8
8
  ###追記
9
9
  可能であればブラウザを閉じていたとしてもそれを判断させたいです。
10
- ログインを行なうシステムを想定しているため、ブラウザを閉じても次回ログイン時に前回のセッションIDを利用して判断は可能かと考えましたが何か他の方法があばご教示願います。
10
+ ログインを行なうシステムを想定しているため、ブラウザを閉じても次回ログイン時に前回のセッションIDを利用して判断は可能かと考えましたが、こでは次にログインしてくれな限りログが残らなくなってしいます。
11
+ 何か他の方法があればご教示願います。

1

ブラウザを閉じた場合について追記

2018/06/04 02:09

投稿

koronatail
koronatail

スコア433

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
  セッションタイムアウト時に、ブラウザ側の操作を行なわずにタイムアウトを検知し、タイムアウトした旨をログに出力したいと考えています。
3
3
  1つ考えた方法としてはセッションタイムアウトが想定される時間をjavascriptで計って、タイムアウトしてそうであればサーバーにリクエストを送って判断させる方法なのですが、これでは確実にタイムアウトを検知できる保障が無いと考えました。
4
+
4
5
  検索してみたのですが、そういったことが可能なのかどうか判断できませんでした。
5
- こういったことは可能なのでしょうか。何かツールやソフトを利用すればできるといった情報、また関連するキーワード等なにかご存知であれば教えていただければと思います。
6
+ こういったことは可能なのでしょうか。何かツールやソフトを利用すればできるといった情報、また関連するキーワード等なにかご存知であれば教えていただければと思います。
7
+
8
+ ###追記
9
+ 可能であればブラウザを閉じていたとしてもそれを判断させたいです。
10
+ ログインを行なうシステムを想定しているため、ブラウザを閉じても次回ログイン時に前回のセッションIDを利用して判断は可能かと考えましたが何か他の方法があればご教示願います。