> 技术文档 > [spring6: HttpSecurity]-全新写法

[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@EnableWebSecuritypublic class SecurityConfig { @Bean public 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();