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

