質問編集履歴

3

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

2018/06/04 04:44

投稿

koronatail
koronatail

スコア433

test CHANGED
File without changes
test CHANGED
@@ -19,3 +19,89 @@
19
19
  ログインを行なうシステムを想定しているため、ブラウザを閉じても次回ログイン時に前回のセッションIDを利用して判断は可能かと考えましたが、これでは次にログインしてくれない限りログが残らなくなってしまいます。
20
20
 
21
21
  何か他の方法があればご教示願います。
22
+
23
+
24
+
25
+ ###解決方法
26
+
27
+ LogoutListener.javaを作成
28
+
29
+ ```java
30
+
31
+ package co.jp.health.common.config;
32
+
33
+
34
+
35
+ import java.util.List;
36
+
37
+
38
+
39
+ import org.springframework.context.ApplicationListener;
40
+
41
+ import org.springframework.security.core.context.SecurityContext;
42
+
43
+ import org.springframework.security.core.session.SessionDestroyedEvent;
44
+
45
+ import org.springframework.security.core.userdetails.UserDetails;
46
+
47
+ import org.springframework.stereotype.Component;
48
+
49
+
50
+
51
+ @Component
52
+
53
+ public class LogoutListener implements ApplicationListener<SessionDestroyedEvent> {
54
+
55
+
56
+
57
+ @Override
58
+
59
+ public void onApplicationEvent(SessionDestroyedEvent event)
60
+
61
+ {
62
+
63
+ System.out.println("onApplicationEvent が呼ばれました" + event.toString());
64
+
65
+ List<SecurityContext> lstSecurityContext = event.getSecurityContexts();
66
+
67
+ UserDetails ud;
68
+
69
+ for (SecurityContext securityContext : lstSecurityContext)
70
+
71
+ {
72
+
73
+ ud = (UserDetails) securityContext.getAuthentication().getPrincipal();
74
+
75
+ // ...
76
+
77
+ }
78
+
79
+ }
80
+
81
+
82
+
83
+ }
84
+
85
+
86
+
87
+ ```
88
+
89
+ WebSecurityConfigurerAdapterを継承したクラスに以下の記述を追加
90
+
91
+ ```java
92
+
93
+ @Bean
94
+
95
+ public DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher() {
96
+
97
+ return new DefaultAuthenticationEventPublisher();
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ この記述をすることで、セッションタイムアウト時にLogoutListenerクラスのonApplicationEventが呼ばれました。
106
+
107
+ セッションタイムアウトが起きたタイミングで正確に呼ばれるわけではありませんが、引数のeventにセッションタイムアウトがおきた際のタイムスタンプが記録されていたのでこれでタイムアウトの時間を判断できました。

2

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

2018/06/04 04:44

投稿

koronatail
koronatail

スコア433

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

1

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

2018/06/04 02:09

投稿

koronatail
koronatail

スコア433

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