spring security之密码管理

1.spring security的加密机制

spring security内置了密码加密机制,只需要一个PasswordEncoder接口

public interface PasswordEncoder {
	// 用数据库存储用户密码时,加密过程使用encode方法
    String encode(CharSequence var1);
	// 用于判断用户登录时输入的密码是否正确
    boolean matches(CharSequence var1, String var2);

    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

如果我们要使用是这个接口,需要将其实现类至于spring ioc容器中,其实,spring security内置了几种常用的实现类,比如:StandardPasswordEncoder、BCryptPasswordEncoder等等

@Bean
public PasswordEncoder passwordEncoder(){
	return new BCryptPasswordEncoder(12);
}

在声明一个PasswordEncoder的bean之后,spring security会自动应用。
到了这一步还没有完成密码加密的完整接入,还需要在创建用户的时候,将加密后的密码放入user中

@Autowired
private PasswordEncoder passwordEncoder;

@RequestMapping("/createUser")
public void createUser(User user){
	user.setPassword(passwordEncoder.encode(user.getPassword()));
	... 存入数据库
}

但是这样会导致老用户的密码失效,所以我们需要重写PasswordEncoder接口中的matches方法

public boolean matches(CharSequence rawPassword,String encodedPassword){
	
	if(如果密码不是bcrypt明文,这个可以用正则匹配){
		// 旧的校验逻辑
	}else{
		// 新的校验逻辑
	}

}

你可能感兴趣的:(springSecurity)