spring boot(学习笔记第十四课)
- Spring Security的密码加密,基于数据库认证
学习内容:
- Spring Security的密码加密
- 基于数据库认证
1. Spring Security的密码加密
- 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的,哪个公司也不会允许用户数据使用明文保存。这里练习使用加密之后的密码进行认证。
注意,这样公司的数据库里面是没有用户的明文密码,即使数据库泄露,也不会暴漏用户的明文密码 - 实现密码加密
- 配置
passwordEncoder
@Bean PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(10); }
- 手动根据明文密码生成密文密码
bcrypt转换工具
注意,每次生成的密码都不一样,但是每个生成的都好用
- 使用生成的密文进行用户的创建。
@Bean UserDetailsService userDetailsService() { InMemoryUserDetailsManager users = new InMemoryUserDetailsManager(); users.createUser(User.withUsername("finlay_user") .password("$2a$10$uwwZ5EyWbFnnw3JG53rqQ.VJUm/.Pl9Ko1CUP5Aqc2kuBr2Bx7bc.") .roles("USER") .build());
- 再次进行认证。
- 配置
2. 基于数据库认证
以上练习了基于内存的认证,实际上,正式的系统开发都是使用数据库进行认证,在这里练习使用使用数据库的用户数据进行认证。这里使用postgresql
。
- 首先创建数据库需要的表
- 创建
USER
表CREATE TABLE "USER"( id int, username varchar(32), password varchar(255), enabled int, locked int, PRIMARY KEY(id) );
- 创建
ROLE
表CREATE TABLE "ROLE"( id int, name varchar(32), nameZh varchar(255), PRIMARY KEY(id) );
- 创建
USER_ROLE
表(user
和role
的关系表)CREATE TABLE "USER_ROLE"
- 创建