前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security 实战干货:自定义配置类入口WebSecurityConfigurerAdapter

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

作者头像
码农小胖哥
发布2019-12-10 16:34:44
8680
发布2019-12-10 16:34:44
举报

1. 前言

今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter ,而且我们知道 Spring Boot 中的自动配置实际上是通过自动配置包下的 SecurityAutoConfiguration 总配置类上导入的 Spring Boot Web 安全配置类 SpringBootWebSecurityConfiguration 来配置的。所以我们就拿它开刀。如果还是一头雾水建议通过 https://felord.cn 查看 Spring Security 实战 。

2. 自定义 Spring Boot Web 安全配置类

我们使用我们最擅长的 Ctrl + CCtrl + V 抄源码中的 SpringBootWebSecurityConfiguration ,命名为我们自定义的 CustomSpringBootWebSecurityConfiguration :

代码语言:javascript
复制
   @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) 这个是我们使用最多的,用来配置 HttpSecurityHttpSecurity 用于构建一个安全过滤器链 SecurityFilterChainSecurityFilterChain 最终被注入核心过滤器 。 HttpSecurity 有许多我们需要的配置。我们可以通过它来进行自定义安全访问策略。所以我们单独开一章来讲解这个东西。

3. HttpSecurity 配置

HttpSecurity 是后面几篇文章的重点,我们将实际操作它来实现一些实用功能。所以本文要着重介绍它。

3.1 默认配置

代码语言:javascript
复制
      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 以第一时间获取相关教程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 自定义 Spring Boot Web 安全配置类
    • 2.1 认证管理器配置方法
      • 2.2 核心过滤器配置方法
        • 2.3 安全过滤器链配置方法
        • 3. HttpSecurity 配置
          • 3.1 默认配置
            • 3.2 常用方法解读
            • 4. 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档