[spring6: HttpSecurity]-全新写法

HttpSecurity

HttpSecurity 是 Spring Security 中用于配置基于 HTTP 请求的安全策略的核心构建器,支持细粒度控制请求授权、认证、登录、登出、CSRF、CORS、会话管理等安全功能。

package xyz.idoly.demo;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http// 请求授权配置.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll()    // /public 下路径允许所有访问.requestMatchers("/admin/**").hasRole("ADMIN") // /admin 下路径需管理员角色.anyRequest().authenticated()                  // 其它请求都需要认证)// 表单登录配置.formLogin(form -> form.loginPage("/login")      // 自定义登录页面.permitAll()              // 登录页面允许所有访问.defaultSuccessUrl("/home", true) // 登录成功后跳转主页)// HTTP Basic 登录(用于 API 认证).httpBasic(Customizer.withDefaults())// 登出配置.logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login?logout").invalidateHttpSession(true).deleteCookies("JSESSIONID"))// CSRF 保护(默认开启,示例中未禁用).csrf(csrf -> csrf// 可以定制 CSRF 规则,示例保持默认)// CORS 配置(示例占位).cors(cors -> {// 可以配置 CorsConfigurationSource})// 会话管理.sessionManagement(session -> session.maximumSessions(1).maxSessionsPreventsLogin(true))// 记住我功能.rememberMe(Customizer.withDefaults());return http.build();}
}
方法名功能描述Lambda DSL 示例
authorizeHttpRequests(...)路径权限控制:根据 URL 路径定义哪些请求需要认证、授权或匿名访问。http.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll().anyRequest().authenticated());
formLogin(...)表单登录配置:启用表单登录,自定义登录页、成功失败跳转路径等。http.formLogin(form -> form.loginPage("/login").permitAll());
httpBasic(...)HTTP Basic 登录配置:用于 API 或测试环境的简单认证。http.httpBasic(Customizer.withDefaults());
logout(...)登出功能配置:定义登出 URL、登出成功跳转等。http.logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login?logout"));
csrf(...)CSRF 防护:默认启用,API 项目常禁用。http.csrf(csrf -> csrf.disable());
cors(...)跨域配置:允许跨域请求,适用于前后端分离架构。http.cors(cors -> { /* 配置 CorsSource */ });
headers(...)安全响应头配置:如 X-Frame-Options 等,提升浏览器安全性。http.headers(headers -> headers.frameOptions(frame -> frame.sameOrigin()));
sessionManagement(...)会话管理:控制最大会话数、并发登录策略等。http.sessionManagement(session -> session.maximumSessions(1).maxSessionsPreventsLogin(true));
exceptionHandling(...)异常处理配置:如访问拒绝或未认证处理方式。http.exceptionHandling(eh -> eh.accessDeniedPage("/403"));
authenticationManager(...)指定认证管理器:用于自定义认证逻辑入口。http.authenticationManager(authManager);
authenticationProvider(...)注册认证提供器:支持多种认证逻辑。http.authenticationProvider(customProvider);
userDetailsService(...)设置用户详情服务:从用户名加载权限等。http.userDetailsService(myUserDetailsService);
securityMatcher(...)限定配置作用路径:只对指定路径生效。http.securityMatcher("/api/**");
addFilter(...)添加自定义 Filter 到过滤器链。http.addFilter(new CustomFilter());
addFilterBefore(...)在指定 Filter 之前添加 Filter。http.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class);
addFilterAfter(...)在指定 Filter 之后添加 Filter。http.addFilterAfter(new CustomFilter(), SecurityContextPersistenceFilter.class);
addFilterAt(...)精确替换指定 Filter 位置。http.addFilterAt(new CustomFilter(), BasicAuthenticationFilter.class);
with(...)启用自定义 DSL 模块,替代 apply(…)。http.with(MyDsl.class, dsl -> dsl.customOption(...));
redirectToHttps(...)强制 HTTPS 跳转:配置端口映射后启用。http.redirectToHttps(https -> https.portMapper(mapper -> mapper.http(8080).mapsTo(8443)));
dispatcherTypeMatchers(...)匹配 DispatcherType,如 ERROR、ASYNC。http.authorizeHttpRequests(auth -> auth.dispatcherTypeMatchers(DispatcherType.ERROR).permitAll());
passwordManagement(...)密码管理入口配置:启用密码修改功能。http.passwordManagement(pm -> pm.changePasswordPage("/change-password"));
oidcLogout(...)配置 OIDC 单点登出功能。http.oidcLogout(oidc -> oidc.backChannel());
oneTimeTokenLogin(...)启用一次性登录令牌功能。http.oneTimeTokenLogin(token -> token.loginUrl("/login/token"));
webAuthn(...)WebAuthn 无密码认证配置。http.webAuthn(wa -> wa.rpName("MyApp"));
setSharedObject(...)注入共享对象供后续配置使用。http.setSharedObject(CustomService.class, myService);
build() / performBuild()构建过滤器链,返回 SecurityFilterChain。return http.build();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90850.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIPI DSI 转 1LVDS ,分辨率1920*1080.

一款桥接芯片,它接收 MP DSI 输入并发送 LVDS 输出。MlPI DSI 支持至多 4 条通道,每条通道的最大传输速率为 1Gbps,总的最大输入带宽为 4Gbps,并且还支持 MlPI 定义的 ULPS(超低功耗状态)。LVDS 输出采用 V…

墨者:SQL手工注入漏洞测试(MySQL数据库)

一、SQL手工注入漏洞测试(MySQL数据库) 本文以墨者学院靶场为例,演示MySQL数据库的手工SQL注入全过程。靶场以自己的地址为准:http://124.70.64.48:47777/new_list.php?id1 二、注入原理与流程(如下指令去掉了id之前的内容) M…

idea打开后project窗口未显示项目名称的解决方案

前言 今天上班后,打开了idea发现之前project窗口中的项目都不见了,啥也没有,见下图原因 一般为配置文件*.iml 出错了。 解决方案1 方法1:若知道出错的具体位置与原因,用文本编辑器打开*.iml文件,找到出错位…

不一样的Mysql安装方式

文章目录MySQL介绍与安装MySQL介绍基本安装下载打开网址点击点击选择LTSwindows选择zip压缩包格式,mac OS选择dmg格式。不需要注册登陆网站,直接谢谢,继续下载即可。解压复制bin路径配置环境变量搜索点击环境变量点击用户变量的Path 或 系统变…

MyBatis高级应用实战指南

MyBatis高级应用实例 以下是MyBatis高级应用实例,涵盖复杂查询、动态SQL、插件开发、缓存优化等场景,帮助深入掌握MyBatis核心技术。 动态SQL构建 Example 1: 多条件动态查询 使用<if>和<where>标签实现条件组合: <select id="findUsers" resu…

Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案

问题1&#xff1a;implicit declaration of function "mmiowb()"解决方法&#xff1a;在 libxdma.c 和 cdev_xvc.c 文件中注释掉所有 mmiowb () 函数调用问题2&#xff1a; "macro"access_ok"passed 3 arguments, but takes just 2"解决方法&…

ThreadLocal--ThreadLocal介绍

&#x1f9e0; 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 Java 提供的一种 线程本地变量机制&#xff1b; 每个线程都维护一份自己的副本&#xff1b; 它不用于多个线程共享变量&#xff0c;而是用于每个线程独立维护自己的变量副本&#xff1b; 常用于&#xff1…

AWS云S3+Glue+EMRonEC2+ReadShift

Amazon S3&#xff08;Amazon Simple Storage Service&#xff09;即亚马逊简单存储服务&#xff0c;是 AWS&#xff08;Amazon Web Services&#xff09;提供的一种对象存储服务&#xff0c;在大数据领域被广泛使用。以下是关于它的详细介绍&#xff1a;基本概念Amazon S3 主要…

OpenLayers 综合案例-轨迹回放

看过的知识不等于学会。唯有用心总结、系统记录&#xff0c;并通过温故知新反复实践&#xff0c;才能真正掌握一二 作为一名摸爬滚打三年的前端开发&#xff0c;开源社区给了我饭碗&#xff0c;我也将所学的知识体系回馈给大家&#xff0c;助你少走弯路&#xff01; OpenLayers…

语音自动生成PPT、思维导图、会议纪要、笔记、大纲、导读等

一、需要用到录音工具&#xff0c;手机端工具&#xff1a;讯飞听见二、需要用到的工具通义&#xff1a;https://www.tongyi.com/discover上传录音&#xff0c;描述一下&#xff0c;让直接给生成PPT就行&#xff0c;点生成就可以生成ppt&#xff0c;对PPT进行导出就行 三、除了生…

【MySQL】脚本化快速搭建跨平台、可定制的MySQL数据库

冗长的废话就省略了&#xff0c;大家看到这篇博客&#xff0c;效果如标题所示&#xff0c;我将提供完整的脚本&#xff0c;并用 「保姆级」的详细步骤&#xff0c;给你提供一个快速搭建跨平台、可定制的 MySQL环境的解决方案。保证无论你是 Linux 服务器管理员、macOS 开发者&a…

MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?

以太网帧、IP包及TCP与UDP的报文格式 下面用通俗技术的方式详细解释&#xff1a; 1. MAC包头&#xff08;以太网帧头&#xff09;中的长度 字段名称&#xff1a;EtherType/Length位置&#xff1a;以太网帧头的第13、14字节含义&#xff1a; 如果值小于等于1500&#xff08;0x0…

Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读

基于多尺度结构引导扩散模型的图像去模糊 摘要 扩散概率模型&#xff08;Diffusion Probabilistic Models, DPMs&#xff09;最近被用于图像去模糊&#xff0c;其被表述为一个以模糊输入为条件的图像条件生成过程&#xff0c;将高斯噪声映射到高质量图像。当在成对的域内数据上…

git 提交时排除一个或多个文件

前言 在提交文件时&#xff0c;总是有一些文件是不需要提交的&#xff0c;比如机器上的配置文件&#xff0c;日志文件等等&#xff0c;所以在提交时就需要排除这些文件&#xff1b; 第一种方案 git add file1 file2 比如我新添加了3个文件&#xff1a; file1.txt file2.txt fil…

OpenCV 入门:基础图像操作

在计算机视觉领域&#xff0c;OpenCV 无疑是最受欢迎的开源库之一。它由 Intel 公司俄罗斯团队发起&#xff0c;如今已成为处理图像和视频的强大工具。本文我会介绍OpenCV 的基础知识&#xff0c;从图像的读写显示到实时视频流处理&#xff0c;迈出计算机视觉的第一步。 目录 …

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(3):使用云平台最小外部依赖方案

文章大纲 1 方案总览(与官方文档映射) 2 环境准备(一步完成) 3 数据层(零代码迁移 Excel → BigQuery 或 SQLite) 4 函数声明(JSON Schema 与官方示例一致) 5 Cloud Function(**最小外部依赖**) 6 客户端调用(对齐官方 Python 示例) 7 Token 与性能对比(官方计费口…

C++高效实现轨迹规划、自动泊车、RTS游戏、战术迂回包抄、空中轨迹、手术机器人、KD树

C++ 算法汇总 基于C++的城市道路场景 以下是基于C++的城市道路场景中车辆紧急变道轨迹生成的实现方法和示例代码。内容涵盖轨迹规划算法、数学建模及代码实现,适用于自动驾驶或驾驶辅助系统开发。 基于多项式曲线的轨迹生成 采用五次多项式(Quintic Polynomial)生成平滑…

电动汽车转向系统及其工作原理

电动汽车的转向系统作为电动汽车的一个关键系统&#xff0c;与燃油车的转向系统有着较大差异。电动汽车的转向系统主要分为 电动助力转向&#xff08;EPS, Electric Power Steering&#xff09; 、电动液压助力转向系统&#xff08;EHPS, Electro-Hydraulic Power Steering&…

TCP/IP 体系结构网络接口层的原理

TCP/IP 网络接口层详解 网络接口层&#xff08;Network Interface Layer&#xff09;是 TCP/IP 模型的最底层&#xff08;对应 OSI 模型的物理层 数据链路层&#xff09;&#xff0c;负责在物理网络中传输原始比特流&#xff0c;实现相邻设备之间的可靠数据传输。核心功能物理…

笔记本键盘的启用和禁用

管理员 打开 CMD&#xff1a;这一步要求以管理员权限打开命令提示符&#xff08;Command Prompt&#xff09;。在Windows系统中&#xff0c;可以通过搜索“cmd”&#xff0c;然后右键选择“以管理员身份运行”来实现。sc config i8042prt start disabled (关闭笔记本键盘)&…