Spring Security使用Lambda DSL配置流程详解
作者:自牧君 发布时间:2021-12-23 19:20:32
标签:Spring,Security,Lambda,配置
1. 概述
在 Spring Security 5.2 中增强了 DSL 的功能:允许使用 Lambda 表达式来配置 HTTP security 。
需要注意的是:先前版本的配置风格仍然是有效的且受支持的。Spring 官方额外新增 Lambda 表达式是为了提高代码的灵活性,只是一个可选的用法。
下面让我们看一下 Lambda 表达式配置 HTTP security 和先前的配置风格的对比。
2. 新老配置风格对比
Lambda风格
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(formLogin ->
formLogin
.loginPage("/login")
.permitAll()
)
.rememberMe(withDefaults());
}
}
等效的旧配置风格
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe();
}
}
对比上述两种配置风格,你会注意到一些关键的不同点:
在 Lambda 风格中,不再需要通过 .and()
方法来串联配置项。
在调用 Lambda 方法后,HttpSecurity
对象 http
会自动返回以继续执行进一步的配置。
方法 withDefaults()
可以使用 Spring Security 提供的默认值启用安全功能。这是 Lambda 表达式 it -> {}
的快捷方式。
3. WebFlux Security
此外,你还可以使用 Lambda 表达式来配置 WebFlux security ,配置方式与上面基本相似。
举个例子:
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange(exchanges ->
exchanges
.pathMatchers("/blog/**").permitAll()
.anyExchange().authenticated()
)
.httpBasic(withDefaults())
.formLogin(formLogin ->
formLogin
.loginPage("/login")
);
return http.build();
}
}
4. Lambda DSL的目标
Lambda DSL 被开发出来,是为了完成以下的目的:
自动缩进以提高配置的可读性。
不再需要使用
.and()
方法来串联配置项。Spring Security DSL 与其他 Spring DSLs (例如 Spring Integration 和 Spring Cloud Gateway ) 拥有相似的配置风格。
来源:https://blog.csdn.net/Sihang_Xie/article/details/128748845


猜你喜欢
- 本文实例实现一个如下图所示的Android折线图,供大家参考,具体内容如下首先是控件绘图区域的划分,控件左边取一小部分(控件总宽度的八分之一
- 1. 什么是局部类型?C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中
- static 表示静态,它可以修饰属性,方法和代码块。1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这
- 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下。在我刚开始工作接触的项目
- 前言:一个游戏里的一个人物会存在多种状态,那么就需要有一个专门管理这些状态的类。不然会显得杂乱无章,不易于后面状态的增加或者减少。思路:既然
- Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们
- 1.为项目添加POIPOI官网链接点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebCo
- 微信公众号发送模版消息 背景:如下图,当用户发布需求的时候,公众号自定推送消息。例如:微信支付的时候,公众号会推送支付成功消息前提:发送模版
- 很多主流框架都使用了反射技术.像ssh框架都采用两种技术 xml做配置文件+反射技术.与反射有关的类包.java.lang.reflect.
- 一、什么是异常异常机制:异常机制是指当程序出现错误后,程序如何处理。具体来说就是程序发生异常,异常机制提供程序的退出安全通道。通俗来说:就是
- 写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面.示例图如下:主Activity代码:pack
- 初看 cgaolei 翻译的 Java技巧之双括弧初始化 一文,走马观花,只知用法,未细看后面的解释。蔚为惊艳,心里想 Java 竟然有这么
- Android部分手机会有虚拟按键,而没有实体按键,例如华为系列的手机。然而在开发过程中,有时候会涉及底部视图的开发,最终的结果却因为虚拟按
- 本文中所有效果通过ItemDecoration实现,通过此实现的可以与业务解耦,让RecyclerView的模板更加简洁,不关心任何辅助性u
- Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应
- 定义在类里面的类就叫做内部类。内部类的特点:在内部类中可以直接访问外部类的成员,包括私有的成员在外部类中不能直接访问内部类的成员,必须通过创
- 本文实例讲述了Java实现SSL双向认证的方法。分享给大家供大家参考,具体如下:我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确
- C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类。这个包包含于System.Text.RegularExpressions命
- 配置文件中使用${}注入值方式在springboot中使用System.setProperty设置参数user: user-na
- 进度条以一种客观化的方式,让我们知道程序正在执行的情况,在程序需要时间执行任务的时候,提示进度条友好的告诉用户说,当前任务还没有完成,请稍稍