转载

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
正文到此结束
Loading...