Spring-Boot2.xx(Spring-security5.x) security.basic.enabled废弃deprecated

官网:不生成默认用户/禁用security方法

Spring-Boot2.xx不生成默认用户需要提供AuthenticationManager, AuthenticationProvider or UserDetailsService.中的一个bean,这些bean可以在实现的WebSecurityConfigurerAdapter类中配置,配置任何一个bean可以不再自动生成默认用户。

禁止Security, Spring-Boot2.xx以前使用security.basic.enabled=false,但是之后需要自己实现一个配置类继承自WebSecurityConfigurerAdapter,并重写configure(http)方法,方法内添加:

http.authorizeRequests().antMatchers("/**").permitAll();
即可实现security.basic.enabled=false的效果
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/**").permitAll();
    }

    /**
     * 配置一个userDetailsService Bean不在生成默认security.user用户
     * @return
     */
    @Bean
    @Override
    protected UserDetailsService userDetailsService() {
        return super.userDetailsService();
    }
}

 

<think>我们正在讨论的是Spring Boot的starter模块,具体是spring-boot-starter-security-2.7.18.jar的作用。 首先,我们需要明确Spring Boot Starter的概念:它是一组方便的依赖描述符,可以包含到应用程序中。通过使用starter,我们可以获得所需的所有Spring和相关技术的一站式支持,而不必手动添加多个依赖项。 具体到spring-boot-starter-security: 这个starter是为了简化Spring SecuritySpring Boot项目中的集成。它自动引入了Spring Security所需的依赖,并且提供了默认的自动配置。 作用包括: 1. 自动引入Spring Security的核心依赖(如spring-security-config, spring-security-web等)以及相关的传递依赖。 2. 提供默认的安全配置(例如,默认会保护所有端点,并生成一个默认用户和随机密码)。 3. 简化自定义安全配置(通过继承WebSecurityConfigurerAdapter或使用@EnableWebSecurity注解)。 因此,在项目中引入spring-boot-starter-security后,我们就可以快速启用Spring Security的功能,而不需要手动管理其各个子模块的版本。 注意:版本2.7.18表示这是Spring Boot 2.7.x系列的第18个小版本(通常包含错误修复和补丁)。 下面,我们详细说明其作用: 1. **依赖管理**:该starter会引入以下关键依赖(以2.7.18版本为例): - spring-security-config: 提供安全配置支持。 - spring-security-web: 提供Web安全支持(过滤器等)。 - spring-security-core: Spring Security核心模块。 - 以及其他可能需要的依赖(如spring-security-oauth2等,但注意在Spring Boot 2.7中,OAuth2支持是分开的)。 2. **自动配置**:Spring Boot的自动配置机制(通过spring-boot-autoconfigure模块)会基于类路径上的类自动配置安全特性。具体来说: - 自动配置一个默认的Web安全配置(如果用户没有自定义配置,则所有请求都需要认证)。 - 自动配置一个内存中的用户(用户名为user,密码在启动时打印在控制台,或者通过配置指定)。 - 配置基本的表单登录和HTTP基本认证。 3. **简化自定义配置**:开发者可以通过添加一个继承自`WebSecurityConfigurerAdapter`的配置类(在Spring Security 5.7之前)或直接使用`@EnableWebSecurity`注解(在5.7及以后,推荐使用基于组件的配置)来覆盖默认配置。 4. **与其他模块集成**:该starter还确保Spring Security能够与Spring Boot的其他模块(如Spring MVC、Spring WebFlux、Actuator等)正确集成。 5. **提供安全特性**:包括但不限于: - 身份验证(Authentication) - 授权(Authorization) - 防止常见攻击(如CSRF、XSS等) - 会话管理 - 等等。 因此,当我们在项目中引入spring-boot-starter-security时,我们就能够快速构建一个安全的Web应用程序。 引用说明:以上内容参考了Spring Boot官方文档[^1]和Spring Security官方文档[^2]。 注意:在Spring Boot 2.7.x中,WebSecurityConfigurerAdapter已经被标记为过时(deprecated),因此在新项目中推荐使用基于组件的配置方式。例如: ```java @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .permitAll() ); return http.build(); } // 配置用户详情服务 @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } } ``` 总结:spring-boot-starter-security-2.7.18.jar的作用是简化Spring SecuritySpring Boot 2.7.18版本项目中的集成,提供默认的安全配置和自动配置,并管理相关依赖。 §§相关问题§§ 1. 如何在Spring Boot中自定义用户认证方式? 2. Spring Security的自动配置原理是什么? 3. 如何禁用Spring Boot的默认安全配置? 4. Spring Boot 2.7中WebSecurityConfigurerAdapter过时后的替代方案是什么? [^1]: Spring Boot官方文档 - Spring Security部分 [^2]: Spring Security官方文档</think>### Spring Boot Starter Security 2.7.18 的作用详解 `spring-boot-starter-security-2.7.18.jar` 是 Spring Boot 框架中用于**快速集成 Spring Security** 的核心启动器模块,主要提供以下核心功能: #### 1. **一站式安全依赖管理** - **自动引入** Spring Security 所有必要组件: - `spring-security-config`(安全配置) - `spring-security-web`(Web安全过滤器) - `spring-security-core`(核心安全逻辑) - `spring-security-crypto`(密码加密) - **版本协调**:确保所有安全子模块版本兼容(如 5.7.x 与 Spring Boot 2.7.18 完美匹配)[^1] #### 2. **零配置安全防护** - **默认安全策略**: - 自动保护所有 HTTP 端点 - 生成随机密码(控制台输出) - 内置表单登录页 ```log // 启动日志示例 Using generated security password: 78fa095d-3f4c-48b1-ad50-24f5e2a8c7d0 ``` #### 3. **自动配置扩展点** - 关键自动配置类: - `SecurityAutoConfiguration`:初始化安全过滤器链 - `UserDetailsServiceAutoConfiguration`:创建默认内存用户 - `WebSecurityEnablerConfiguration`:激活 `@EnableWebSecurity` - 通过 `spring.security.*` 配置属性实现自定义: ```properties # application.properties spring.security.user.name=admin spring.security.user.password=secret spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://idp/.well-known/jwks.json ``` #### 4. **安全协议集成** - **开箱即用支持**: - HTTP Basic 认证 - 表单登录 - OAuth2 资源服务器(JWT 验证) - CSRF 防护 - CORS 配置 - 会话管理 - **安全过滤器链**:自动注册 `FilterChainProxy` 处理请求安全 #### 5. **无缝整合 Spring Boot 生态** - **Actuator 安全**:自动保护 `/actuator` 端点 - **方法级安全**:支持 `@PreAuthorize` 注解 - **测试支持**:提供 `@WithMockUser` 测试注解 #### 6. **自定义扩展能力** - 通过继承 `WebSecurityConfigurerAdapter`(2.7 仍兼容): ```java @EnableWebSecurity public class CustomSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public/**").permitAll() .anyRequest().authenticated(); } } ``` - 或使用组件式配置(推荐): ```java @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth .requestMatchers("/api/**").hasRole("ADMIN") ); return http.build(); } ``` > **注意**:在 Spring Boot 3.x 中,`WebSecurityConfigurerAdapter` 已废弃,但 2.7.18 仍支持传统配置方式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值