Browse Source

Update Reactive Max Sessions sample

Marcus Hert Da Coregio 1 year ago
parent
commit
b9449ecc4a

+ 13 - 8
reactive/webflux/java/session-management/maximum-sessions/src/main/java/com/example/maximumsessions/SecurityConfig.java

@@ -18,6 +18,7 @@ package com.example.maximumsessions;
 
 import reactor.core.publisher.Mono;
 
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -25,6 +26,7 @@ import org.springframework.security.config.Customizer;
 import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
 import org.springframework.security.config.web.server.ServerHttpSecurity;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.session.InMemoryReactiveSessionRegistry;
 import org.springframework.security.core.session.ReactiveSessionRegistry;
 import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
 import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
@@ -35,7 +37,7 @@ import org.springframework.security.web.server.authentication.InvalidateLeastUse
 import org.springframework.security.web.server.authentication.PreventLoginServerMaximumSessionsExceededHandler;
 import org.springframework.security.web.server.authentication.ServerMaximumSessionsExceededHandler;
 import org.springframework.security.web.server.authentication.SessionLimit;
-import org.springframework.security.web.session.WebSessionStoreReactiveSessionRegistry;
+import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
 import org.springframework.web.server.session.DefaultWebSessionManager;
 import org.springframework.web.server.session.WebSessionManager;
 
@@ -47,7 +49,8 @@ public class SecurityConfig {
 	private boolean preventLogin;
 
 	@Bean
-	SecurityWebFilterChain filterChain(ServerHttpSecurity http) {
+	SecurityWebFilterChain filterChain(ServerHttpSecurity http,
+			ServerMaximumSessionsExceededHandler maximumSessionsExceededHandler) {
 		// @formatter:off
 		http
 				.authorizeExchange((exchanges) -> exchanges.anyExchange().authenticated())
@@ -55,7 +58,7 @@ public class SecurityConfig {
 				.sessionManagement((sessions) -> sessions
 						.concurrentSessions((concurrency) -> concurrency
 							.maximumSessions(maxSessions())
-							.maximumSessionsExceededHandler(maximumSessionsExceededHandler()))
+							.maximumSessionsExceededHandler(maximumSessionsExceededHandler))
 				);
 		return http.build();
 		// @formatter:on
@@ -82,9 +85,8 @@ public class SecurityConfig {
 	}
 
 	@Bean
-	ReactiveSessionRegistry reactiveSessionRegistry(WebSessionManager webSessionManager) {
-		return new WebSessionStoreReactiveSessionRegistry(
-				((DefaultWebSessionManager) webSessionManager).getSessionStore());
+	ReactiveSessionRegistry reactiveSessionRegistry() {
+		return new InMemoryReactiveSessionRegistry();
 	}
 
 	private SessionLimit maxSessions() {
@@ -99,11 +101,14 @@ public class SecurityConfig {
 		};
 	}
 
-	private ServerMaximumSessionsExceededHandler maximumSessionsExceededHandler() {
+	@Bean
+	ServerMaximumSessionsExceededHandler maximumSessionsExceededHandler(
+			@Qualifier(WebHttpHandlerBuilder.WEB_SESSION_MANAGER_BEAN_NAME) WebSessionManager webSessionManager) {
 		if (this.preventLogin) {
 			return new PreventLoginServerMaximumSessionsExceededHandler();
 		}
-		return new InvalidateLeastUsedServerMaximumSessionsExceededHandler();
+		return new InvalidateLeastUsedServerMaximumSessionsExceededHandler(
+				((DefaultWebSessionManager) webSessionManager).getSessionStore());
 	}
 
 }