Spring Boot 2.0.1中无法禁用Spring Security问题求助
我来帮你排查下这个问题哈!你遇到的核心矛盾是:虽然移除了spring-boot-starter-security,但依赖的oauth2-auto-configuration依然会引入Spring Security相关的自动配置逻辑,再加上你的SecurityConfig配置类还在生效,才导致前端请求依旧被拦截(Postman正常是因为它默认不携带CSRF令牌等前端特有的请求头)。下面分步骤给你解决思路:
1. 修改SecurityConfig,彻底放开所有请求
你的SecurityConfig标注了@EnableWebSecurity,这会强制触发Spring Security的配置逻辑,哪怕你移除了starter依赖。可以调整它的配置方法,让所有请求无需认证,同时关闭CSRF校验(这是前端请求被拦截的关键原因之一):
@Configuration @EnableWebSecurity(debug = true) @Order(SecurityProperties.BASIC_AUTH_ORDER) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public static PasswordEncoder passwordEncoder() { // 临时用无加密实现,生产环境请替换为BCryptPasswordEncoder等安全实现 return NoOpPasswordEncoder.getInstance(); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() // 关闭CSRF校验,适配前端自动携带令牌的特性 .authorizeRequests() .anyRequest().permitAll() // 所有请求无需认证 .and().sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); // 关闭会话,避免会话拦截 } }
2. 排除OAuth2相关的自动配置类
oauth2-auto-configuration依赖本身会引入Spring Security OAuth2的自动配置,这些配置可能偷偷添加了认证拦截规则。你需要在启动类上主动排除这些自动配置:
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class, OAuth2AutoConfiguration.class, OAuth2ClientAutoConfiguration.class, OAuth2ResourceServerAutoConfiguration.class }) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3. 清理间接引入的Security依赖
检查你的pom.xml(或build.gradle),确保没有间接引入Spring Security核心依赖。可以用Maven命令查看依赖树:
mvn dependency:tree | grep security
如果输出里还有spring-security-web、spring-security-core这类依赖,找到对应的父依赖并通过<exclusions>标签排除掉。
额外排查技巧
打开@EnableWebSecurity(debug = true)的日志输出,你能看到具体是哪个配置类在生效拦截请求,根据日志信息针对性调整或排除配置,能更快定位问题。
内容的提问来源于stack exchange,提问作者Arsen Cenko




