如何为Spring Boot项目配置单静态账号的HTTP Basic认证?
如何在Spring Boot中配置全局单一静态账号的HTTP Basic认证
嘿,我懂你要的是什么——不用搞复杂的用户数据库,就一个固定的用户名密码,所有接口都用这个Basic认证来保护对吧?这事儿在Spring Boot里超简单,给你两种方案,挑你顺手的来:
方案一:直接用配置文件(最快捷)
如果你的需求就是单纯的全局认证,没有特殊自定义要求,直接在application.properties或者application.yml里加几行配置就行:
用application.properties的写法:
# 设置静态用户名 spring.security.user.name=myadmin # 设置密码(注意:生产环境建议用加密后的密码,下文会说) spring.security.user.password=mypassword123 # 可选:给用户分配角色,比如ROLE_USER spring.security.user.roles=USER
用application.yml的写法:
spring: security: user: name: myadmin password: mypassword123 roles: USER
配置完启动项目,所有控制器接口都会被自动保护,访问时浏览器会弹出Basic认证框,输入你设置的账号密码就能正常访问了。
注意:生产环境别直接写明文密码!你可以用
BCryptPasswordEncoder生成加密后的密码,然后在配置文件里加上{bcrypt}前缀,比如:spring.security.user.password={bcrypt}$2a$10$EixZaY3sT7p1bLxqU5M78Ov6e9k7XaV8e9k7XaV8e9k7XaV8e9k7XaV8
方案二:用配置类(更灵活)
如果你需要自定义一些规则,比如排除某个公开接口、自定义密码加密方式,就写个Spring Security配置类:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { // 配置认证规则 @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth // 可选:设置不需要认证的接口,比如公开的健康检查接口 .requestMatchers("/actuator/health").permitAll() // 剩下的所有请求都需要认证 .anyRequest().authenticated() ) // 启用HTTP Basic认证 .httpBasic(); return http.build(); } // 配置内存存储的静态用户 @Bean public UserDetailsService userDetailsService() { UserDetails staticUser = User.withUsername("myadmin") // 对密码进行BCrypt加密 .password(passwordEncoder().encode("mypassword123")) .roles("USER") .build(); return new InMemoryUserDetailsManager(staticUser); } // 配置密码加密器 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
这个方案的好处是可以灵活调整认证规则,比如给某些接口开白名单,或者更换加密算法。
两种方案都能满足你的需求,因为你是唯一使用者,方案一足够简单快速;如果以后有扩展需求,再换成方案二就行。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

