p147 坑
在介绍Spring Security框架的时候,文中代码如下:
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.withUser("ayi").password("123456").roles("ADMIN").and()
.withUser("alan").password("123456").roles("USER");
}
但是在笔者的尝试过程中,用户并不能登录成功。报的错误为:
There is no PasswordEncoder mapped for the id “null”
这是因为Spring security 5.0中新增了多种加密方式,也改变了密码的格式,参考Spring Security 无法登陆,报错:There is no PasswordEncoder mapped for the id “null”。
官方文档原话:
The general format for a password is:
{id}encodedPassword
Such that id is an identifier used to look up which PasswordEncoder should be used and encodedPassword is the original encoded password for the selected PasswordEncoder. The id must be at the beginning of the password, start with { and end with }. If the id cannot be found, the id will be null. For example, the following might be a list of passwords encoded using different id. All of the original passwords are "password".
{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG
{noop}password
{pbkdf2}5d923b44a6d129f3ddf3e3c8d29412723dcbde72445e8ef6bf3b508fbf17fa4ed4d6b99ca763d8dc
{scrypt}$e0801$8bWJaSu2IKSn9Z9kM+TPXfOc/9bdYSrN1oD9qfVThWEwdRTnO7re7Ei+fUZRJ68k9lTyuTeUp4of4g24hHnazw==$OAOec05+bXxvuu/1qZ6NUR+xQYvYv7BeL1QxwRpY5Pc=
{sha256}97cde38028ad898ebc02e690819fa220e88c62e0699403e94fff291cfffaf8410849f27605abcbc0
如今Spring Security中密码的存储格式是“{id}encodedPassword”。前面的id是加密方式,id可以是bcrypt、sha256等,后面跟着的是加密后的密码。也就是说,程序拿到传过来的密码的时候,会首先查找被“{”和“}”包括起来的id,来确定后面的密码是被怎么样加密的,如果找不到就认为id是null。
因此,按照上面的提示,可以将代码修改为:
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).
withUser("ayi").password(new BCryptPasswordEncoder()
.encode("123456")).roles("USER");
}
更进一步,后面关于CustomUserService的代码相应的修改为:
...
String encodedPswd = new BCryptPasswordEncoder().encode(ayUser.getPassword());
return new User(ayUser.getName(), encodedPswd, authorityList);
...
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserService()).
passwordEncoder(new BCryptPasswordEncoder());
}
Redis 客户端
对于《第7章 集成 Redis缓存》,mac上有一个好用的Redis 客户端软件,非常好用。可以参考mac安装Redis可视化工具-Redis Desktop Manager
设置邮箱
在《第9章 Quartz 定时器和发送 Email》中,关于如何设置邮件服务器,可以参考Spring mvc之 发邮件(qq.163...),以163为例:
首先进入163邮箱首页,选择--设置:
选择---开启 ---- 获取验证码 ---输入验证码
163_3.png
163_4.png
点击 --- 确定 ,勾选协议开启
163_5.png
网友评论