9
9
import org .springframework .security .config .annotation .method .configuration .EnableMethodSecurity ;
10
10
import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
11
11
import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
12
+ import org .springframework .security .config .http .SessionCreationPolicy ;
13
+ import org .springframework .security .core .session .SessionRegistry ;
14
+ import org .springframework .security .core .session .SessionRegistryImpl ;
12
15
import org .springframework .security .core .userdetails .UserDetailsService ;
13
16
import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
14
17
import org .springframework .security .crypto .password .PasswordEncoder ;
@@ -44,6 +47,11 @@ public PasswordEncoder passwordEncoder() {
44
47
45
48
@ Autowired private FirstLoginFilter firstLoginFilter ;
46
49
50
+ @ Bean
51
+ public SessionRegistry sessionRegistry () {
52
+ return new SessionRegistryImpl ();
53
+ }
54
+
47
55
@ Bean
48
56
public SecurityFilterChain filterChain (HttpSecurity http ) throws Exception {
49
57
http .addFilterBefore (userAuthenticationFilter , UsernamePasswordAuthenticationFilter .class );
@@ -53,6 +61,14 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
53
61
http .csrf (csrf -> csrf .disable ());
54
62
http .addFilterBefore (rateLimitingFilter (), UsernamePasswordAuthenticationFilter .class );
55
63
http .addFilterAfter (firstLoginFilter , UsernamePasswordAuthenticationFilter .class );
64
+ http .sessionManagement (
65
+ sessionManagement ->
66
+ sessionManagement
67
+ .sessionCreationPolicy (SessionCreationPolicy .IF_REQUIRED )
68
+ .maximumSessions (3 )
69
+ .maxSessionsPreventsLogin (true )
70
+ .sessionRegistry (sessionRegistry ())
71
+ .expiredUrl ("/login?logout=true" ));
56
72
http .formLogin (
57
73
formLogin ->
58
74
formLogin
0 commit comments