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
方式。常用的方法解读如下:

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

4. 总结


到今天为止,我们已经由浅入深学习了很多关于  Spring Security
的知识。已经具有开始自定义来实现一些实用的功能了,在后面的文章开始我们将结合实际开发场景进行一些实战操作。敬请关注公众号:

Felordcn
 以第一时间获取相关教程。

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

关注我,回复“
加群

加入各种主题讨论群

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

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

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

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

  • Spring 体系常用项目一览


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

朕已阅 

原文 

http://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247488948&idx=3&sn=cbb77e520a55280dba30aa7815adefec

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring Security 实战干货:自定义配置类入口 WebSecurityConfigurerAdapter

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址