点击上方蓝色“程序猿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 以第一时间获取相关教程。

本文通过OpenWrite的Markdown转换工具发布

关注我,回复“加群”加入各种主题讨论群

  • 在服务器上排除问题的头 5 分钟

  • 一文了解 lambda 用法与源码分析

  • 多个Java版本如何灵活切换和管理?

  • Spring 体系常用项目一览

  • 阿里规定超过三张表禁止JOIN,为啥?

朕已阅 

Spring Security 实战干货:自定义配置类入口 WebSecurityConfigurerAdapter相关推荐

  1. Spring Security 进阶干货:自定义配置类入口WebSecurityConfigurerAdapter

    1. 前言 今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter ,而且我们知道 Spring Boot ...

  2. Spring Security 实战干货:玩转自定义登录

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 前面的关于 Spring Security  ...

  3. Spring Security 实战:基于配置的接口角色访问控制

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  4. Spring Security 实战干货: RBAC权限控制概念的理解

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  5. Spring Security 实战:自定义异常处理

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 最近实在比较忙,很难抽出时间来继续更  [S ...

  6. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

  7. Spring Security 实战干货:客户端OAuth2授权请求的入口在哪里

    1. 前言 在Spring Security 实战干货:OAuth2 第三方授权初体验一文中我先对 OAuth2.0 涉及的一些常用概念进行介绍,然后直接通过一个 DEMO 来让大家切身感受了 OAu ...

  8. Spring Security 实战干货:实现自定义退出登录

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 上一篇对 Spring Security 所 ...

  9. Spring Security 实战干货:OAuth2登录获取Token的核心逻辑

    作者 | 码农小胖哥 来源 | https://mp.weixin.qq.com/s/zdTBdSVunqwVGx-spHjLjw 1. 前言 在上一篇Spring Security 实战干货:OAu ...

最新文章

  1. congratulation的用法_congratulation的用法
  2. (chap4 Http状态码) 5XX
  3. 马斯克再发声,称人工智能是人类文明面临的最大风险
  4. android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener
  5. 控制HTML Input只能输入数字和小数点
  6. tp快捷路径 __URL__和__APP__
  7. 数字图像处理(五)——形态学
  8. CentOS7.2安装jdk7u80
  9. c++的输入流基础知识
  10. 2010年经典语录,我们全OUT了
  11. 贺利坚老师汇编课程29笔记:在代码段使用栈将程序定义的数据逆序
  12. 不足百行代码 实体数组转DataTable通用类
  13. MFC中如何画带实心箭头的直线
  14. jetson nano的USB转232 DB9串口线选购
  15. fabao_get.y
  16. LeetCode 每日一题331. 验证二叉树的前序序列化
  17. c语言语法口诀,一般过去时语法口诀
  18. php生成器处理数据问题,《PHP经典实例》笔记数组篇 - 4.24 使用生成器高效迭代处理大型数据集...
  19. TWS耳机供应链,看看背后都有谁?
  20. mixpanel实验教程(1)

热门文章

  1. easyui datagrid onLoadSuccess方法 正确使用
  2. U盘安装CentOS 7
  3. PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
  4. 几种开源软件名字的读音
  5. vs2012 编译 zlib 1.2.8
  6. 关于inline函数
  7. c++图形中如何判断鼠标点击在一条直线上_PS教程:十种抠图方法【上】
  8. python数据分析类库_python数据分析类库系列-Pandas入门之数据结构Series
  9. leetcode10 为什么p[j-1] == '*'的时候,不能用递推公式dp[i][j] = dp[i][j-1] || dp[i][j-2] || dp[i-1][j]
  10. 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...