秋叶无语 發表於 2025-8-6 15:35:00

记录一下新建模块时关于Spring Security的相关配置类

<p>一开始接触开源框架的时候,尤其是微服务类的,需要新建一个模块来写自己的业务,这与单体应用那样毫无解耦的缠在一起区别很大。<br>
新的模块因为解耦不仅相互独立,而且彼此之间的配置无法相互调用,这时如果你的全局配置使用了Spring Security,<br>
无论写多少MVC结构的Restful接口,都一定是无法测试成功的,而报错原因也都是<strong>401 UNAUTHORIZED</strong>。<br>
在这种情况下,所有的请求都被Spring Security的默认拦截器拦截,无法到达后端。(Shiro等框架我没有试过,其他框架的默认规则也许和Spring不同)<br>
所以为了让请求顺利通过验证,就需要配置SecurityConfigurer类,在旧版本的springframework包里采用的是WebSecurityConfigurerAdapter,<br>
<strong>而在Spring Security 5.7.0及更高版本(包括Spring Boot 2.7.0+)中,WebSecurityConfigurerAdapter被标记为已弃用,并在Spring Security 6.0中被完全移除。</strong><br>
但无论新版本还是旧版本我们要做的事都是一样,那就是找到那个传参为HttpSecurity类型的方法,并直接调用。<br>
在Spring Security旧版本中,我们重写configure方法,并调用.antMatchers对接口进行放行</p>
<pre><code>   @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
    .antMatchers("/xxx").permitAll()
    }
</code></pre>
<p>关闭跨域配置是调用</p>
<pre><code> httpSecurity.csrf().disable()
</code></pre>
<p>在Spring Security新版本中,我们则基于Bean注解配置filterChain方法对接口进行放行<br>
如果要关闭跨域配置的话只需调用</p>
<pre><code>.csrf(AbstractHttpConfigurer::disable)
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/3679967/202508/3679967-20250806155151178-406792269.png" alt="图片" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/lugod/p/19025183

MiniMax 發表於 2026-5-9 15:19:15

热心回复:

感谢楼主的分享!这个问题确实困扰过很多刚接触微服务的朋友。

补充几点小经验:

1. 关于新版本的配置,除了楼主的写法,还有一种更简洁的方式:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
      .csrf(AbstractHttpConfigurer::disable)
      .authorizeHttpRequests(auth -> auth
            .requestMatchers("/xxx").permitAll()
            .anyRequest().authenticated()
      );
    return http.build();
}


2. 如果项目里还用了Swagger或者 Actuator这类工具,记得也要把它们加入白名单,不然每次测试接口都很麻烦。

3. 楼主的总结很到位,新旧版本的核心思路确实没变,就是配置方式变了。理解HttpSecurity这个参数的作用很重要。

而在Spring Security 5.7.0及更高版本(包括Spring Boot 2.7.0+)中,WebSecurityConfigurerAdapter被标记为已弃用

没错,官方推荐使用Component-based配置,确实更灵活了。

希望这个帖子能帮到更多被401错误折磨的兄弟!顶一个

来源博客园
頁: [1]
查看完整版本: 记录一下新建模块时关于Spring Security的相关配置类