فهرست منبع

Fix basic auth logout page (#2106)

Roman Zabaluev 3 سال پیش
والد
کامیت
c1bdbec2b2
1فایلهای تغییر یافته به همراه23 افزوده شده و 16 حذف شده
  1. 23 16
      kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/auth/BasicAuthSecurityConfig.java

+ 23 - 16
kafka-ui-api/src/main/java/com/provectus/kafka/ui/config/auth/BasicAuthSecurityConfig.java

@@ -1,14 +1,18 @@
 package com.provectus.kafka.ui.config.auth;
 package com.provectus.kafka.ui.config.auth;
 
 
 import com.provectus.kafka.ui.util.EmptyRedirectStrategy;
 import com.provectus.kafka.ui.util.EmptyRedirectStrategy;
+import java.net.URI;
 import lombok.extern.log4j.Log4j2;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
 import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
+import org.springframework.security.config.web.server.SecurityWebFiltersOrder;
 import org.springframework.security.config.web.server.ServerHttpSecurity;
 import org.springframework.security.config.web.server.ServerHttpSecurity;
 import org.springframework.security.web.server.SecurityWebFilterChain;
 import org.springframework.security.web.server.SecurityWebFilterChain;
 import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
 import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
+import org.springframework.security.web.server.authentication.logout.RedirectServerLogoutSuccessHandler;
+import org.springframework.security.web.server.ui.LogoutPageGeneratingWebFilter;
 
 
 @Configuration
 @Configuration
 @EnableWebFluxSecurity
 @EnableWebFluxSecurity
@@ -16,25 +20,28 @@ import org.springframework.security.web.server.authentication.RedirectServerAuth
 @Log4j2
 @Log4j2
 public class BasicAuthSecurityConfig extends AbstractAuthSecurityConfig {
 public class BasicAuthSecurityConfig extends AbstractAuthSecurityConfig {
 
 
+  public static final String LOGIN_URL = "/auth";
+  public static final String LOGOUT_URL = "/auth?logout";
+
   @Bean
   @Bean
   public SecurityWebFilterChain configure(ServerHttpSecurity http) {
   public SecurityWebFilterChain configure(ServerHttpSecurity http) {
     log.info("Configuring LOGIN_FORM authentication.");
     log.info("Configuring LOGIN_FORM authentication.");
-    http.authorizeExchange()
-        .pathMatchers(AUTH_WHITELIST)
-        .permitAll()
-        .anyExchange()
-        .authenticated();
-
-    final RedirectServerAuthenticationSuccessHandler handler = new RedirectServerAuthenticationSuccessHandler();
-    handler.setRedirectStrategy(new EmptyRedirectStrategy());
-
-    http
-        .httpBasic().and()
-        .formLogin()
-        .loginPage("/auth")
-        .authenticationSuccessHandler(handler);
-
-    return http.csrf().disable().build();
+
+    final var authHandler = new RedirectServerAuthenticationSuccessHandler();
+    authHandler.setRedirectStrategy(new EmptyRedirectStrategy());
+
+    final var logoutSuccessHandler = new RedirectServerLogoutSuccessHandler();
+    logoutSuccessHandler.setLogoutSuccessUrl(URI.create(LOGOUT_URL));
+
+    return http
+        .addFilterAfter(new LogoutPageGeneratingWebFilter(), SecurityWebFiltersOrder.REACTOR_CONTEXT)
+        .csrf().disable()
+        .authorizeExchange()
+        .pathMatchers(AUTH_WHITELIST).permitAll()
+        .anyExchange().authenticated()
+        .and().formLogin().loginPage(LOGIN_URL).authenticationSuccessHandler(authHandler)
+        .and().logout().logoutSuccessHandler(logoutSuccessHandler)
+        .and().build();
   }
   }
 
 
 }
 }