如何让togglz-console绕过Spring Security认证,在管理端口免权访问?
问题根源
你开启了togglz.console.use-management-port=true,这会让Togglz控制台部署在**管理端口(8081)**上。而你当前定义的SecurityFilterChain是作用于主应用端口的Web上下文的,管理端口拥有独立的Web上下文,主应用的安全规则不会覆盖到这里,所以控制台依然会被登录拦截。
解决方案
需要单独为管理端口的Web上下文配置安全规则,创建一个带@ManagementContextConfiguration注解的配置类,在里面定义针对管理端口的SecurityFilterChain:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementContextConfiguration; @Configuration @ManagementContextConfiguration public class ManagementSecurityConfig { @Bean public SecurityFilterChain managementSecurityFilterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests(requests -> requests // 放行Togglz控制台和Actuator端点 .requestMatchers("/togglz-console/**", "/actuator/**") .permitAll() // 其他管理端口请求需要认证(如果有) .anyRequest().authenticated() ) .csrf(csrf -> csrf.disable()) .build(); } }
额外注意事项
- 移除
togglz-security-spring-boot-starter依赖,该依赖是用来给Togglz控制台添加权限控制的,与你要完全放开认证的需求冲突。 - 保留
togglz.console.secured=false配置,确保Togglz自身不会额外添加认证拦截。
完成配置后,重启应用访问http://localhost:8081/togglz-console即可无需认证直接进入控制台。
内容的提问来源于stack exchange,提问作者robjwilkins
相关产品推荐
相关产品推荐

