/** * BladeX Commercial License Agreement * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. *
* Use of this software is governed by the Commercial License Agreement * obtained after purchasing a license from BladeX. *
* 1. This software is for development use only under a valid license * from BladeX. *
* 2. Redistribution of this software's source code to any third party * without a commercial license is strictly prohibited. *
* 3. Licensees may copyright their own code but cannot use segments * from this software for such purposes. Copyright of this software * remains with BladeX. *
* Using this software signifies agreement to this License, and the software * must not be used for illegal purposes. *
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is * not liable for any claims arising from secondary or illegal development. *
* 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 } }