Spring Security 实战干货:自定义配置类入口 WebSecurityConfigurerAdapter
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
1. 前言
今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter
,而且我们知道 Spring Boot 中的自动配置实际上是通过自动配置包下的 SecurityAutoConfiguration
总配置类上导入的 Spring Boot Web 安全配置类 SpringBootWebSecurityConfiguration
来配置的。所以我们就拿它开刀。如果还是一头雾水建议通过 https://felord.cn 查看 Spring Security 实战 。
2. 自定义 Spring Boot Web 安全配置类
我们使用我们最擅长的 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
)了三个方法,我们一般会通过自定义配置这三个方法来自定义我们的安全访问策略。
2.1 认证管理器配置方法
void configure(AuthenticationManagerBuilder auth)
用来配置认证管理器AuthenticationManager
。说白了就是所有 UserDetails
相关的它都管,包含 PasswordEncoder
密码机。如果你不清楚可以通过 Spring Security 中的 UserDetail 进行了解。本文对 AuthenticationManager
不做具体分析讲解,后面会有专门的文章来讲这个东西 。 可通过 Spring Security 实战系列 进行学习。
2.2 核心过滤器配置方法
void configure(WebSecurity web)
用来配置 WebSecurity
。而 WebSecurity
是基于 Servlet Filter
用来配置 springSecurityFilterChain
。而 springSecurityFilterChain
又被委托给了 Spring Security 核心过滤器 Bean DelegatingFilterProxy
。 相关逻辑你可以在 WebSecurityConfiguration
中找到。我们一般不会过多来自定义 WebSecurity
, 使用较多的使其ignoring()
方法用来忽略 Spring Security 对静态资源的控制。
2.3 安全过滤器链配置方法
void configure(HttpSecurity http)
这个是我们使用最多的,用来配置 HttpSecurity
。 HttpSecurity
用于构建一个安全过滤器链 SecurityFilterChain
。SecurityFilterChain
最终被注入核心过滤器 。 HttpSecurity
有许多我们需要的配置。我们可以通过它来进行自定义安全访问策略。所以我们单独开一章来讲解这个东西。
3. HttpSecurity 配置
HttpSecurity
是后面几篇文章的重点,我们将实际操作它来实现一些实用功能。所以本文要着重介绍它。
3.1 默认配置
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
认证
3.2 常用方法解读
HttpSecurity
使用了builder
的构建方式来灵活制定访问策略。最早基于 XML
标签对 HttpSecurity
进行配置。现在大部分使用 javaConfig
方式。常用的方法解读如下:
4. 总结
到今天为止,我们已经由浅入深学习了很多关于 Spring Security 的知识。已经具有开始自定义来实现一些实用的功能了,在后面的文章开始我们将结合实际开发场景进行一些实战操作。敬请关注公众号:Felordcn
以第一时间获取相关教程。
关注我,回复“加群”加入各种主题讨论群
在服务器上排除问题的头 5 分钟
一文了解 lambda 用法与源码分析
多个Java版本如何灵活切换和管理?
Spring 体系常用项目一览
阿里规定超过三张表禁止JOIN,为啥?
朕已阅
Spring Security 实战干货:自定义配置类入口 WebSecurityConfigurerAdapter相关推荐
- Spring Security 进阶干货:自定义配置类入口WebSecurityConfigurerAdapter
1. 前言 今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter ,而且我们知道 Spring Boot ...
- Spring Security 实战干货:玩转自定义登录
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 前面的关于 Spring Security ...
- Spring Security 实战:基于配置的接口角色访问控制
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- Spring Security 实战干货: RBAC权限控制概念的理解
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- Spring Security 实战:自定义异常处理
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 最近实在比较忙,很难抽出时间来继续更 [S ...
- Spring Security 实战干货:自定义异常处理
Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...
- Spring Security 实战干货:客户端OAuth2授权请求的入口在哪里
1. 前言 在Spring Security 实战干货:OAuth2 第三方授权初体验一文中我先对 OAuth2.0 涉及的一些常用概念进行介绍,然后直接通过一个 DEMO 来让大家切身感受了 OAu ...
- Spring Security 实战干货:实现自定义退出登录
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 上一篇对 Spring Security 所 ...
- Spring Security 实战干货:OAuth2登录获取Token的核心逻辑
作者 | 码农小胖哥 来源 | https://mp.weixin.qq.com/s/zdTBdSVunqwVGx-spHjLjw 1. 前言 在上一篇Spring Security 实战干货:OAu ...
最新文章
- congratulation的用法_congratulation的用法
- (chap4 Http状态码) 5XX
- 马斯克再发声,称人工智能是人类文明面临的最大风险
- android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener
- 控制HTML Input只能输入数字和小数点
- tp快捷路径 __URL__和__APP__
- 数字图像处理(五)——形态学
- CentOS7.2安装jdk7u80
- c++的输入流基础知识
- 2010年经典语录,我们全OUT了
- 贺利坚老师汇编课程29笔记:在代码段使用栈将程序定义的数据逆序
- 不足百行代码 实体数组转DataTable通用类
- MFC中如何画带实心箭头的直线
- jetson nano的USB转232 DB9串口线选购
- fabao_get.y
- LeetCode 每日一题331. 验证二叉树的前序序列化
- c语言语法口诀,一般过去时语法口诀
- php生成器处理数据问题,《PHP经典实例》笔记数组篇 - 4.24 使用生成器高效迭代处理大型数据集...
- TWS耳机供应链,看看背后都有谁?
- mixpanel实验教程(1)
热门文章
- easyui datagrid onLoadSuccess方法 正确使用
- U盘安装CentOS 7
- PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
- 几种开源软件名字的读音
- vs2012 编译 zlib 1.2.8
- 关于inline函数
- c++图形中如何判断鼠标点击在一条直线上_PS教程:十种抠图方法【上】
- python数据分析类库_python数据分析类库系列-Pandas入门之数据结构Series
- leetcode10 为什么p[j-1] == '*'的时候,不能用递推公式dp[i][j] = dp[i][j-1] || dp[i][j-2] || dp[i-1][j]
- 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...