文章目录
SHA
和MD5
,结合salt
(盐)是一种不错的选择,但是如果知道其加密的规则还是相对不安全。BCryptPasswordEncoder
类,使用Bcrypt强哈希方法来加密密码public String encode(CharSequence rawPassword)
: 对给定的内容进行加密,返回加密后的字符串public boolean matches(CharSequence rawPassword, String encodedPassword)
: 比较给定的字符串和加密后的字符串是否是同一个rawPassword
:未加密的字符串encodedPassword
: 加密后的字符串 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
BCryptPasswordEncoder
/**
* Spring security的配置类
*/
@Configuration
public class SecurityConfig extends 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 UserServiceImpl implements 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;
}
}