SecurityFilterChain相关的配置和示例说明

最近在做技术升级工作,Spring Boot 2.x升级Spring Boot 3.x自然也就涉及到Security(Security5.x升级Security6.x)SecurityFilterChain相关的配置和示例说明。

SecurityFilterChain 是Spring Security 5.4及更高版本中引入的一个关键概念,它取代了之前的WebSecurityConfigurerAdapter作为配置安全性的主要方式。SecurityFilterChain 是Spring Security中用来配置安全过滤器链的主要方式,它提供了丰富的API来定制和管理安全设置。下面详细介绍SecurityFilterChain中可用的一些主要配置选项及其用途。

1. authorizeHttpRequests

authorizeHttpRequests 是用于配置哪些请求需要认证以及哪些请求可以匿名访问的关键方法。它允许你根据请求的URL、HTTP方法等来决定是否需要认证。

示例配置
http
    .authorizeHttpRequests((authorize) -> authorize
        .requestMatchers("/public/**").permitAll() // 公共资源
        .requestMatchers(HttpMethod.POST, "/secure/post/**").hasRole("ADMIN") // POST请求需要管理员权限
        .anyRequest().authenticated() // 其他所有请求都需要认证
    );

2. formLogin

formLogin 用于配置传统的表单登录页面。

示例配置
http
    .formLogin((form) -> form
        .loginPage("/login") // 自定义登录页面
        .loginProcessingUrl("/login") // 处理登录请求的URL
        .defaultSuccessUrl("/welcome", true) // 登录成功后的默认跳转URL
        .failureUrl("/login?error") // 登录失败后的URL
        .permitAll() // 允许任何人访问登录页面
    );

3. httpBasic

httpBasic 用于配置基本的身份验证,通常用于RESTful服务或API。

示例配置
http
    .httpBasic(Customizer.withDefaults()); // 启用HTTP Basic认证

4. logout

logout 用于配置登出逻辑。

示例配置
http
    .logout((logout) -> logout
        .logoutUrl("/logout") // 登出请求的URL
        .logoutSuccessUrl("/login?logout") // 登出成功后的URL
        .permitAll() // 允许任何人访问登出URL
    );

5. sessionManagement

sessionManagement 用于配置会话管理,例如是否自动创建会话、会话超时时间等。

示例配置
http
    .sessionManagement((session) -> session
        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // 默认策略,需要时创建会话
        .maximumSessions(1) // 最大会话数
        .maxSessionsPreventsLogin(false) // 是否阻止登录
        .expiredUrl("/session-expired") // 会话过期后的URL
    );

6. cors

cors 用于配置跨域资源共享(CORS),允许你控制哪些源可以访问你的应用程序。

示例配置
http
    .cors((cors) -> cors
        .configurationSource(request -> newCorsConfiguration()) // 自定义CORS配置
    );

7. csrf

csrf 用于配置跨站请求伪造(CSRF)保护。

示例配置
http
    .csrf((csrf) -> csrf
        .disable() // 禁用CSRF保护
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) // 自定义CSRF令牌存储
    );

8. oauth2Login

oauth2Login 用于配置OAuth2登录。

示例配置
http
    .oauth2Login((oauth2) -> oauth2
        .loginPage("/login/oauth2") // OAuth2登录页面
        .userInfoEndpoint((userInfo) -> userInfo
            .userService(oAuth2UserService) // 自定义OAuth2用户服务
        )
    );

9. oauth2ResourceServer

oauth2ResourceServer 用于配置OAuth2资源服务器,保护API端点。

示例配置
http
    .oauth2ResourceServer((oauth2) -> oauth2
        .jwt(Customizer.withDefaults()) // 配置JWT令牌验证
    );

10. rememberMe

rememberMe 用于配置记住我功能,使用户在关闭浏览器后仍能保持登录状态。

示例配置
http
    .rememberMe((rememberMe) -> rememberMe
        .key("uniqueAndSecret") // 密钥
        .tokenValiditySeconds(1209600) // 记住我令牌的有效期(秒)
        .userDetailsService(userDetailsService) // 用户详细信息服务
    );

11. exceptionHandling

exceptionHandling 用于配置异常处理。

示例配置
http
    .exceptionHandling((exceptions) -> exceptions
        .authenticationEntryPoint(new MyAuthenticationEntryPoint()) // 自定义未认证入口点
        .accessDeniedHandler(new MyAccessDeniedHandler()) // 自定义拒绝访问处理器
    );

12. headers

headers 用于配置响应头,如X-Frame-Options等。

示例配置
http
    .headers((headers) -> headers
        .frameOptions(frameOptions -> frameOptions.sameOrigin()) // 配置X-Frame-Options
    );

13. authenticationManager

authenticationManager 用于配置认证管理器。

示例配置
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
    return http.getSharedObject(AuthenticationManagerBuilder.class)
        .authenticationProvider(authenticationProvider())
        .and()
        .build();
}

14. authenticationProvider

authenticationProvider 用于配置认证提供者。

示例配置
@Bean
public AuthenticationProvider authenticationProvider() {
    DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
    provider.setUserDetailsService(userDetailsService);
    provider.setPasswordEncoder(passwordEncoder);
    return provider;
}

15. addFilterBeforeaddFilterAfter

addFilterBeforeaddFilterAfter 用于在安全过滤器链中插入自定义过滤器。

示例配置
http
    .addFilterBefore(myCustomFilter, UsernamePasswordAuthenticationFilter.class); // 在UsernamePasswordAuthenticationFilter之前插入过滤器

总结

SecurityFilterChain 提供了非常强大的功能来定制和管理Spring Security的安全过滤器链。通过上述配置选项,你可以灵活地配置各种安全需求,从简单的表单登录到复杂的OAuth2集成,再到细粒度的URL访问控制。这些配置选项可以组合使用,以满足几乎所有的安全需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闫小甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值