Spring Security实战--(四)密码加密

一、密码安全的重要性

密码加密是一个很重要的安全性问题,当数据库存储密码时,应该使用可以安全存储用户密码的意识,防止数据库的明文密码泄露造成严重灾难

二、加密机制

PasswordEncoder接口

public interface PasswordEncoder {

	/**
	 * 加密过程
	String encode(CharSequence rawPassword);

	/**
	 * 判断密码是否正确
	 */
	boolean matches(CharSequence rawPassword, String encodedPassword);
}

其中encode方法是加密过程,matches方法用于判断用户登录时输入的密码是否正确

Spring Security实战--(四)密码加密_第1张图片
可以看到SpringSecurity提供了很多的实现类,方便各种加密方式,也可以自己实现PasswordEncoder接口,重写以上两种方法,实现自定义的加密以及匹配模式

SpringSecurity官方推荐使用BCryptPasswordEncoder加密方式,其主要是通过限制算法的速度,让暴力穷举破解无法承受

三、BCrypt加密方式实现

主要是在Security的配置文件中修改

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(myUserDetailService).passwordEncoder(new BCryptPasswordEncoder(12));
}

因为数据库之前存的是明文密码,加密方式更改之后,数据库中的密码必须改为BCrypt加密方式,这里提供一个123456加密后的密码$2a 12 12 12u5fGdlQBp7PjHz1.j0gbD.S8wjeeiY6ftVg8S9I9KYKOEuKpQEIyG,存入数据库后。

启动应用,输入用户名和密码,即可成功登录
在这里插入图片描述

你可能感兴趣的:(Spring,Security)