Merge pull request 'Вход без всплывающего окна браузера (Basic) — на форму входа при 401' (#5) from fix/no-basic-auth-popup into master

Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
2026-11-05 15:34:40 +01:00
2 changed files with 24 additions and 11 deletions
@@ -2,11 +2,13 @@ package com.mailserver.config;
import com.mailserver.security.JwtAuthenticationFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.context.annotation.Configuration;
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.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authentication.HttpStatusServerEntryPoint;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsConfigurationSource;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
@@ -42,6 +44,11 @@ public class SecurityConfig {
public SecurityWebFilterChain filterChain(ServerHttpSecurity http) {
http
.csrf(ServerHttpSecurity.CsrfSpec::disable)
// JWT only: without this an API call with no token gets 401 + "WWW-Authenticate: Basic",
// and the browser shows its own login popup where our mailbox password does not work
.httpBasic(ServerHttpSecurity.HttpBasicSpec::disable)
.formLogin(ServerHttpSecurity.FormLoginSpec::disable)
.exceptionHandling(e -> e.authenticationEntryPoint(new HttpStatusServerEntryPoint(HttpStatus.UNAUTHORIZED)))
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
.authorizeExchange(exchange -> exchange
.pathMatchers("/api/login", "/api/register", "/actuator/health").permitAll()