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(); |