点击上方
Java
老铁,并选择 设为星标
优质文章和资料会及时送达
任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。
有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择。Spring Security
提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强
哈希方法来加密密码。BCrypt强哈希方法 每次加密的结果都不一样。
引入Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
添加配置类
我们在添加了spring security依赖后,所有的地址都被spring security所控制了,我们目
前只是需要用到BCrypt密码加密的部分,所以我们要添加一个配置类,配置为所有地址
都可以匿名访问。
/**
* 安全配置类
*/
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
将BCryptPasswordEncoder添加到Spring容器中
@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
给密码加密
@Autowired
private BCryptPasswordEncoder encoder;、
public void add(Admin admin) {
admin.setId( idWorker.nextId()+"" );
//加密
String newPassword = encoder.encode(admin.getPassword());
admin.setPassword(newPassword);
adminDao.save(admin);
}
登录时密码校验
public Admin findByLoginnameAndPassword(String loginname,String password){
Admin admin = adminDao.findByLoginname(loginname);
//验证密码是否匹配
if (admin != null && encoder.matches(password,admin.getPassword())){
return admin;
}else{
return null;
}
}
版权声明:本文为mytimelife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。