[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(); }}
authorizeHttpRequests(...)
http.authorizeHttpRequests(auth -> auth.requestMatchers(\"/public/**\").permitAll().anyRequest().authenticated());
formLogin(...)
http.formLogin(form -> form.loginPage(\"/login\").permitAll());
httpBasic(...)
http.httpBasic(Customizer.withDefaults());
logout(...)
http.logout(logout -> logout.logoutUrl(\"/logout\").logoutSuccessUrl(\"/login?logout\"));
csrf(...)
http.csrf(csrf -> csrf.disable());
cors(...)
http.cors(cors -> { /* 配置 CorsSource */ });
headers(...)
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(...)
http.addFilter(new CustomFilter());
addFilterBefore(...)
http.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class);
addFilterAfter(...)
http.addFilterAfter(new CustomFilter(), SecurityContextPersistenceFilter.class);
addFilterAt(...)
http.addFilterAt(new CustomFilter(), BasicAuthenticationFilter.class);
with(...)
http.with(MyDsl.class, dsl -> dsl.customOption(...));
redirectToHttps(...)
http.redirectToHttps(https -> https.portMapper(mapper -> mapper.http(8080).mapsTo(8443)));
dispatcherTypeMatchers(...)
http.authorizeHttpRequests(auth -> auth.dispatcherTypeMatchers(DispatcherType.ERROR).permitAll());
passwordManagement(...)
http.passwordManagement(pm -> pm.changePasswordPage(\"/change-password\"));
oidcLogout(...)
http.oidcLogout(oidc -> oidc.backChannel());
oneTimeTokenLogin(...)
http.oneTimeTokenLogin(token -> token.loginUrl(\"/login/token\"));
webAuthn(...)
http.webAuthn(wa -> wa.rpName(\"MyApp\"));
setSharedObject(...)
http.setSharedObject(CustomService.class, myService);
build()
/ performBuild()
return http.build();