转载

SpringBoot实现BCrypt密码加密

  • 出于安全的考虑,一些敏感的信息是绝对不能以明文的方式存储在数据库中的,比如密码通常是通过哈希算法进行加密的。有很多标准的算法比如 SHAMD5 ,结合 salt (盐)是一种不错的选择,但是如果知道其加密的规则还是相对不安全。
  • Spring security提供了 BCryptPasswordEncoder 类,使用Bcrypt强哈希方法来加密密码
  • Bcrypt强哈希算法每次加密的结果都是不一样的。

API

  • public String encode(CharSequence rawPassword) : 对给定的内容进行加密,返回加密后的字符串
  • public boolean matches(CharSequence rawPassword, String encodedPassword) : 比较给定的字符串和加密后的字符串是否是同一个
    rawPassword
    encodedPassword
    

使用

  • 引入spring security的依赖
   <dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 添加security的配置类,如下:
    • 在其中注入 BCryptPasswordEncoder
/**
 * Spring security的配置类
 */
@Configuration
public class SecurityConfigextends WebSecurityConfigurerAdapter{
	@Override
	protected void configure(HttpSecurity http)throws Exception {
		http.authorizeRequests()
		.antMatchers("/**")
		.permitAll()
		.anyRequest()
		.authenticated()
		.and().csrf().disable();
		super.configure(http);
	}
	
	/*
	 * 注入BCryptPasswordEncoder
	 */
	@Bean
	public BCryptPasswordEncoder bCryptPasswordEncoder(){
		return new BCryptPasswordEncoder();
	}
	
}
  • 主配置类添加 @EnableWebSecurity
@SpringBootApplication
@EnableWebSecurity   //开启security
public class AuthServerApplication{
  • 在业务层实现登录和注册的功能 ,对密码进行加密和校验
@Service
@Transactional
public class UserServiceImplimplements UserService{
	
	@Resource
	private UserRepository userRepository;
	
	@Resource
	private BCryptPasswordEncoder bCryptPasswordEncoder;  //注入bcryct加密

	@Override
	public User add(User user){
		user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); //对密码进行加密
		User user2 = userRepository.save(user);
		return user2;
	}

	@Override
	public ResultInfo login(User user){
		ResultInfo resultInfo=new ResultInfo();
		User user2 = userRepository.findByName(user.getName());  
		if (user2==null) {
			resultInfo.setCode("-1");
			resultInfo.setMessage("用户名不存在");
			return resultInfo;
		}
		
		//判断密码是否正确
		if (!bCryptPasswordEncoder.matches(user.getPassword(),user2.getPassword())) {
			resultInfo.setCode("-1");
			resultInfo.setMessage("密码不正确");
			return resultInfo;
		}
		resultInfo.setMessage("登录成功");
		return resultInfo;
	} 
}
原文  https://chenjiabing666.github.io/2018/12/25/SpringBoot实现BCrypt密码加密/
正文到此结束
Loading...