目录
授权的方式包括 web 授权和方法授权,web授权是通过 url 拦截进行授权,方法授权是通过方法拦截进行授权。他们都会调用 accessDecisionManager 进行授权决策,若为web授权则拦截器为FilterSecurityInterceptor;若为方法授权则拦截器为MethodSecurityInterceptor。如果同时通过web 授权和方法授权则先执行web授权,再执行方法授权,最后决策通过,则允许访问资源,否则将禁止访问。
1、web 授权
Spring Security 可以通过 http.authorizeRequests() 对web请求进行授权保护 ,Spring Security使用标准Filter建立了对web请求的拦截,最终实现对资源的授权访问。
protected void configure(HttpSecurity http) throws Exception {
http.formLogin();//表单提交
// 授权 -> 认证拦截
http.authorizeRequests()
.antMatchers(
"/login.html",
"/error.html",
"/main.html",
"/admin/**")
.permitAll() // 不需要认证
.anyRequest() // 所有请求都必须认证
.authenticated();
http.csrf().disable(); //关闭csrf防护
}
(1)访问控制的url匹配
在配置类中http.authorizeRequests() 主要是对url进行控制。配置顺序会影响之后授权的效果,越是具体的应该放在前面,越是笼统的应该放到后面。
anyRequest(),表示匹配所有的请求。一般情况下此方法都会使用,设置全部内容都需要进行认证,会放在最后。
http.authorizeRequests()
.anyRequest() // 所有请求都必须认证
.authenticated();
antMatchers() ,方法定义如下:
public C antMatchers(String... antPatterns) {
return chainRequestMatchers(RequestMatchers.antMatchers(antPatterns));
}
参数是不定项参数,每个参数是一个 ant 表达式,用于匹配 URL规则。ANT通配符有三种:
| 通配符 | 说明 |
| ? | 匹配任何单字符 |
| * | 匹配0或者任意数量的字符 |
| ** | 匹配0或者更多的目录 |
在实际项目中经常需要放行所有静态资源:
// 放行js和css 目录下所有的文件
.antMatchers("/js/**","/css/**").permitAll()
// 只要是.js 文件都放行
.antMatchers("/**/*.js").permitAll()
regexMatchers(),使用正则表达式进行匹配。
//所有以.js 结尾的文件都被放行
.regexMatchers( ".+[.]js").permitAll()
无论是 antMatchers() 还是 regexMatchers() 都具有两个参数的方法,其中第一个参数都是HttpMethod ,表示请求方式,当设置了 HttpMethod 后表示只有设定的特定的请求方式才执行对应的权限设置。
.antMatchers(HttpMethod.POST,"/admin/demo").permitAll()
.regexMatchers(HttpMethod.GET,".+[.]jpg").permitAll()
mvcMatchers(),适用于配置了 servletPath 的情况。 servletPath 就是所有的 URL 的统一前缀。在 SpringBoot 整合SpringMVC 的项目中可以在application.properties 中添加下面内容设置ServletPath。
spring.mvc.servlet.path=/web
在 Spring Security 的配置类中配置 .servletPath() 是 mvcMatchers()返回值特有的方法,antMatchers()和 regexMatchers() 没有这个方法。在 servletPath() 中配置了 servletPath 后,mvcMatchers()直接写 SpringMVC 中

本文深入探讨了Spring Security的授权机制,包括基于URL的访问控制、基于权限、角色以及表达式的授权。讲解了如何通过antMatchers、regexMatchers、mvcMatchers等进行URL匹配,并使用hasRole、hasAuthority等进行权限判断。此外,还介绍了方法授权中的JSR-250注解、@Secured注解和表达式注解的使用,以及如何自定义403错误处理。内容详实,适合Spring Security的学习者参考。

5820

被折叠的 条评论
为什么被折叠?



