[spring6: HttpSecurity]-全新写法

发布于:2025-07-29 ⋅ 阅读:(17) ⋅ 点赞:(0)

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

网站公告

今日签到

点亮在社区的每一天
去签到