点击上方蓝色“ 程序猿DD ”,选择“设为星标”
回复“ 资源 ”获取独家整理的学习资料!
今天我们要进一步的的学习如何自定义配置 Spring Security
我们已经多次提到了
WebSecurityConfigurerAdapter
,而且我们知道 Spring Boot
中的自动配置实际上是通过自动配置包下的
SecurityAutoConfiguration
总配置类上导入的 Spring Boot Web
安全配置类
SpringBootWebSecurityConfiguration
来配置的。所以我们就拿它开刀。
如果还是一头雾水建议通过
https://felord.cn
查看 Spring Security 实战
。
我们使用我们最擅长的
Ctrl + C
、
Ctrl + V
抄源码中的
SpringBootWebSecurityConfiguration
,命名为我们自定义的
CustomSpringBootWebSecurityConfiguration
:
@Configuration
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
public class CustomSpringBootWebSecurityConfiguration {
@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER)
static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
}
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
}
}
}
相信已经有人注意到了上面
DefaultConfigurerAdapter
中我覆写(
@Override
)了三个方法,我们一般会通过自定义配置这三个方法来自定义我们的安全访问策略。
void configure(AuthenticationManagerBuilder auth)
用来配置认证管理器
AuthenticationManager
。说白了就是所有
UserDetails
相关的它都管,包含
PasswordEncoder
密码机。
如果你不清楚可以通过
Spring Security 中的 UserDetail 进行了解。本文对
AuthenticationManager
不做具体分析讲解,后面会有专门的文章来讲这个东西 。
可通过
Spring Security 实战系列 进行学习。
void configure(WebSecurity web)
用来配置
WebSecurity
。而
WebSecurity
是基于
Servlet Filter
用来配置
springSecurityFilterChain
。而
springSecurityFilterChain
又被委托给了 Spring Security 核心过滤器 Bean
DelegatingFilterProxy
。 相关逻辑你可以在
WebSecurityConfiguration
中找到。我们一般不会过多来自定义
WebSecurity
, 使用较多的使其
ignoring()
方法用来忽略 Spring Security
对静态资源的控制。
void configure(HttpSecurity http)
这个是我们使用最多的,用来配置
HttpSecurity
。
HttpSecurity
用于构建一个安全过滤器链
SecurityFilterChain
。
SecurityFilterChain
最终被注入 核心过滤器
。
HttpSecurity
有许多我们需要的配置。我们可以通过它来进行自定义安全访问策略。所以我们单独开一章来讲解这个东西。
HttpSecurity
是后面几篇文章的重点,我们将实际操作它来实现一些实用功能。所以本文要着重介绍它。
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();
}
上面是 Spring Security 在 Spring Boot 中的默认配置。通过以上的配置,你的应用具备了一下的功能:
所有的请求访问都需要被授权。
使用
form
表单进行登陆(默认路径为
/login
),也就是前几篇我们见到的登录页。
防止
CSRF
攻击、
XSS
攻击。
启用
HTTP Basic
认证
HttpSecurity
使用了
builder
的构建方式来灵活制定访问策略。最早基于
XML
标签对
HttpSecurity
进行配置。现在大部分使用
javaConfig
方式。常用的方法解读如下:
到今天为止,我们已经由浅入深学习了很多关于 Spring Security
的知识。已经具有开始自定义来实现一些实用的功能了,在后面的文章开始我们将结合实际开发场景进行一些实战操作。敬请关注公众号:
Felordcn
以第一时间获取相关教程。
本文通过OpenWrite的Markdown转换工具发布
关注我,回复“ 加群 ” 加入各种主题讨论群
在服务器上排除问题的头 5 分钟
一文了解 lambda 用法与源码分析
多个Java版本如何灵活切换和管理?
Spring 体系常用项目一览
阿里规定超过三张表禁止JOIN,为啥?
朕已阅