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