yangys
2025-06-30 8d8ff1ded346338d5ea223e699134d5800ddc8c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * BladeX Commercial License Agreement
 * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
 * <p>
 * Use of this software is governed by the Commercial License Agreement
 * obtained after purchasing a license from BladeX.
 * <p>
 * 1. This software is for development use only under a valid license
 * from BladeX.
 * <p>
 * 2. Redistribution of this software's source code to any third party
 * without a commercial license is strictly prohibited.
 * <p>
 * 3. Licensees may copyright their own code but cannot use segments
 * from this software for such purposes. Copyright of this software
 * remains with BladeX.
 * <p>
 * Using this software signifies agreement to this License, and the software
 * must not be used for illegal purposes.
 * <p>
 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
 * not liable for any claims arising from secondary or illegal development.
 * <p>
 * Author: DreamLu (596392912@qq.com)
 */
package org.springblade.admin.config;
 
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springblade.admin.security.InternalAuthorizationManager;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
 
import java.net.URI;
 
/**
 * 监控安全配置
 *
 * @author L.cm
 */
@EnableWebFluxSecurity
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(AdminServerProperties.class)
public class SecurityConfiguration {
    private final String contextPath;
 
    public SecurityConfiguration(AdminServerProperties adminServerProperties) {
        this.contextPath = adminServerProperties.getContextPath();
    }
 
    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
        // @formatter:off
        RedirectServerAuthenticationSuccessHandler successHandler = new RedirectServerAuthenticationSuccessHandler();
        successHandler.setLocation(URI.create(contextPath + "/"));
        return http
            // 明确调用headers()方法进行配置
            .headers(headers -> headers
                // 禁用frameOptions
                .frameOptions(ServerHttpSecurity.HeaderSpec.FrameOptionsSpec::disable)
            )
            // 配置授权规则
            .authorizeExchange(exchanges -> exchanges
                .pathMatchers(
                    contextPath + "/assets/**",
                    contextPath + "/login",
                    contextPath + "/v1/agent/**",
                    contextPath + "/v1/catalog/**",
                    contextPath + "/v1/health/**"
                ).permitAll()
                .pathMatchers(contextPath + "/actuator", contextPath + "/actuator/**")
                .access(new InternalAuthorizationManager())
                .anyExchange().authenticated()
            )
            // 配置表单登录
            .formLogin(formLogin -> formLogin
                .loginPage(contextPath + "/login")
                .authenticationSuccessHandler(successHandler)
            )
            // 配置登出
            .logout(logout -> logout
                .logoutUrl(contextPath + "/logout")
            )
            // 禁用HTTP Basic认证
            .httpBasic(ServerHttpSecurity.HttpBasicSpec::disable)
            // 禁用CSRF
            .csrf(ServerHttpSecurity.CsrfSpec::disable)
            .build();
        // @formatter:on
    }
 
}