当前位置: 首页 > news >正文

[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.dtcms.com/a/297360.html

相关文章:

  • 【小沐学GIS】基于Unity3d绘制三维数字地球Earth(Unity3d、OpenGL、GIS)
  • Cacti 前台命令注入漏洞(CVE-2022-46169)
  • Dockerfile 文件及指令详解
  • 《C++初阶之STL》【vector容器:详解 + 实现】
  • 【Docker项目实战】在Docker环境下部署go-file文件分享工具
  • 伯俊科技× OB Cloud:零售业落地AI的“三步走”渐进式发展实践
  • Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
  • 冠捷科技 | 内生外化,精准触达,实现数字化转型精准赋能
  • 我从农村来到了大城市
  • (LeetCode 面试经典 150 题) 57. 插入区间 (数组)
  • 学习日志18 python
  • 2025最新蜘蛛池在百度SEO中的应用
  • 如何将荣耀手机的照片传输到 Mac
  • 数据结构2-集合类ArrayList与洗牌算法
  • 百度快排技术分析的核心要素
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的私域流量池用户运营研究
  • 如何实现缓存音频功能(App端详解)
  • 代驾小程序系统开发:引领出行行业数字化转型
  • JMeter压测场景 jp@gc - stepping thread group 步长插件的使用
  • 大模型API和秘钥获取地址
  • NodeJS搭建SSE接口服务
  • 深入解析Hadoop MapReduce中Reduce阶段排序的必要性
  • ⭐ Unity 编辑器扩展:简单自动合并多个 Mesh 并导出为 .asset
  • 通过kettle获取API数据
  • 虚拟机docker elasticsearch启动失败
  • JMeter每次压测前清除全部以确保异常率准确(以黑马点评为例、详细图解)
  • 如何提高微信小程序的应用速度
  • 数据赋能(332)——安全与合规——保密管理
  • RocketMQ5.3.1的安装
  • C 语言数组深度解析:从内存布局到安全实践的全维度指南