如何为Spring Security默认用户配置密码编码器实现密码加密?
解决方案
1. 生成BCrypt加密密码
先把原始密码myPassword转换成BCrypt加密后的字符串,可通过简单代码生成:
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; public class PasswordGenerator { public static void main(String[] args) { BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); String hashedPassword = encoder.encode("myPassword"); System.out.println(hashedPassword); } }
运行后会得到类似$2a$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx格式的加密字符串。
2. 更新application.properties配置
将生成的加密密码加上{bcrypt}前缀,替换原密码配置:
spring.security.user.name=myUser spring.security.user.password={bcrypt}$2a$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx spring.security.user.roles=admin
3. 确认现有配置有效性
你已经在WebSecurityConfig中定义了PasswordEncoder Bean,Spring Security会自动识别密码中的{bcrypt}前缀,并使用你配置的BCryptPasswordEncoder完成密码验证——不需要额外配置AuthenticationManagerBuilder或数据源,因为你采用的是Spring Security默认的内存用户认证机制,application.properties里的配置会被自动加载。
如果想要显式配置内存用户(替代application.properties的配置),可以在WebSecurityConfig中重写configure(AuthenticationManagerBuilder auth)方法:
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .passwordEncoder(encoder()) .withUser("myUser") .password("{bcrypt}$2a$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") .roles("admin"); }
此时可删除application.properties里的用户配置。
4. 测试验证
启动应用后,用用户名myUser和原始密码myPassword通过HTTP Basic认证访问接口,即可正常通过权限校验。
内容的提问来源于stack exchange,提问作者skywalker
相关产品推荐
相关产品推荐

