spring Security配置拦截规则小结

 更新时间:2025年09月09日 09:58:59   作者:bug别找我  
本文介绍了使用Spring Security解决后台管理系统在访问静态资源如图片时需要登录验证的问题,通过配置拦截规则,将静态资源路径添加到白名单,感兴趣的可以了解一下

问题描述

使用spring Security实现后台管理系统登录验证加拦截,访问图片即静态资源时响应需要登录验证,分析问题得出结论未配置security的拦截规则,没有对静态资源进行登录放行

解决方案:

配置spring Security拦截规则,将访问路径添加进入白名单中,比如博主将resources下files下的图片设置白名单,规则就是"/files/**",以下就是博主的配置

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	protected void configure(HttpSecurity http) throws Exception {
		http.authorizeRequests()
			.antMatchers("/files/**").permitAll()// 配置拦截规则
			.anyRequest().authenticated();
	}
 }

有关spring security的配置器相关规则

http.authorizeRequests().antMatchers("/api/**").denyAll();    //拒绝api路径下所有的访问

http.authorizeRequests().antMatchers("/api/**").authenticated();    //api路径下访问需认证通过

http.authorizeRequests().antMatchers("/api/**").permitAll();    //api路径下无条件允许访问

端点保护配置

了解到这部分的知识是因为在做OAuth2认证的时候,我发现项目中的安全配置已经开放所有请求(即/**请求不进行拦截),但是当我访问/oauth/token的时候竟然提示401,百思不得其解。最后发现原来在Spring Security中预制了一些默认断点保护策略。具体配置是在AuthorizationServerSecurityConfiguration

过滤规则踩到的坑

.requestMatchers().antMatchers("/test/**").and()
.authorizeRequests().antMatchers("/test/authenticated").authenticated()
.anyRequest().permitAll().and()

通过匹配规则我们可以知道这部分配置的意思是针对/test/**的请求将使用安全配置,/test/authenticated是需要认证的,匹配/test/**且不是/test/authenticated的请求是不需要认证的。但是在实际项目中却遇到了一个坑,就是我访问/test/**的任何请求都是需要认证的,跟了源码发现是使用错误,具体原因是因为我在继承WebSecurityConfigurerAdapter重写configure(HttpSecurity http)方法的最后多写了一行代码

super.configure(http);

我在最后又去调用了WebSecurityConfigurerAdapterconfigure(HttpSecurity http)方法

protected void configure(HttpSecurity http) throws Exception {
   logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");
   http
      .authorizeRequests().anyRequest().authenticated().and()
      .formLogin().and()
      .httpBasic();
}

这个是WebSecurityConfigurerAdapter.configure方法的源码,它默认会对所有请求进行过滤。有兴趣的同学可以跟踪源码会发现Spring SecurityURL拦截规则最后是存放在Map中,即在super的配置会覆盖掉自定义配置导致自定义配置失效,写的比较简洁可能不是很好理解。

到此这篇关于spring Security配置拦截规则小结的文章就介绍到这了,更多相关spring Security 拦截规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 透明化Sharding-JDBC数据库字段加解密方案

    透明化Sharding-JDBC数据库字段加解密方案

    这篇文章主要为大家介绍了透明化Sharding-JDBC数据库字段加解密方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • Java实现的简单字符串反转操作示例

    Java实现的简单字符串反转操作示例

    这篇文章主要介绍了Java实现的简单字符串反转操作,结合实例形式分别描述了java遍历逆序输出以及使用StringBuffer类的reverse()方法两种字符串反转操作技巧,需要的朋友可以参考下
    2018-08-08
  • idea中database不显示问题的解决

    idea中database不显示问题的解决

    这篇文章主要介绍了idea中database不显示问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    浅谈一下Java为什么不能使用字符流读取非文本的二进制文件

    这篇文章主要介绍了浅谈一下为什么不能使用字符流读取非文本的二进制文件,刚学Java的IO流部分时,书上说只能使用字节流去读取图片、视频等非文本二进制文件,不能使用字符流,否则文件会损坏,需要的朋友可以参考下
    2023-04-04
  • mybatis实现表与对象的关联关系_动力节点Java学院整理

    mybatis实现表与对象的关联关系_动力节点Java学院整理

    这篇文章主要介绍了mybatis实现表与对象的关联关系_动力节点Java学院整理,需要的朋友可以参考下
    2017-09-09
  • Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解

    Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解

    这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下
    2020-05-05
  • 详解基于redis实现分布式锁

    详解基于redis实现分布式锁

    系统的不断扩大,分布式锁是最基本的保障。与单机的多线程不一样的是,分布式跨多个机器。线程的共享变量无法跨机器。本文将介绍基于redis实现分布式锁。
    2021-06-06
  • java gui实现计算器小程序

    java gui实现计算器小程序

    这篇文章主要为大家详细介绍了java gui实现计算器小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决maven加载依赖时遇到的问题

    解决maven加载依赖时遇到的问题

    这篇文章主要介绍了解决maven加载依赖时遇到的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • hystrix服务降级方法使用介绍

    hystrix服务降级方法使用介绍

    什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
    2022-09-09

最新评论