You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:25:16