今天测试提了一个bug,用户名不区分大小写也能成功登录。
一开始以为是安全框架(Security)的问题
但实际上,security把登录的逻辑完全交给了loadUserByUsername方法
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
//查询数据库
}
比如此时我数据库中的用户名为小写的 admin。
我尝试用大写用户名登录
可以看出,传给这个方法的参数依然是大写的,security没有动过这个变量。
继续向下走
发现即使是大写,也依然可以查询到数据。说明问题出在了数据库上。
当前数据库中用户名的编码排序规则为
utf8mb4_general_ci ,是忽略大小写的。将排序规则改为 大小写敏感的utf8mb4_bin即可。
再次尝试登录
问题解决了