昨天使用spring security安全框架是出现了前端请求提示403,后端数据却查到了的问题.
也可以说是authenticate为空或者是authenticate一直不往后执行的问题
前言
昨天下午折腾了一下午,看了教学视频很多遍也没有发现一点不同,所以结果就是没有解决(解决了但没完全解决)
具体过程是:::一直以为下图中方框那里authenticationManager.authenticate(authenticationToken)
为空,或者是没有获取到什么东西。后来打断点发现会一直不断的在这里循环下去(不知道有没有结尾),后来觉得是idea的原因,于是在那里尝试重构项目,maven的clean和install也试过,重启idea,重启电脑,都没用。后来以为是自己最近更新了mysql和idea的原因,但是没想着去折腾回老版本了。还想过跨域和WebSecurityConfigurerAdapter弃用
的问题,但是我的配置的好好的,根本没问题
转折
然后看到哔哩哔哩的评论区(下图方框二)有个解决方法,就是替换调图中的
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserName(),user.getPassword());
Authentication authenticate = authenticationManager.authenticate(authenticationToken);
//判断是否认证通过
if(Objects.isNull(authenticate)){
throw new RuntimeException("用户认证不通过(账号或者密码错误)");
}
//获取userId,生成token(jwt)
LoginUser loginUser = (LoginUser) authenticate.getPrincipal();
改为直接从userDetailsService中调用方法
LoginUser loginUser = (LoginUser)userDetailsService.loadUserByUsername(user.getUserName());
这样确实是解决了,但是心里还是有些芥蒂(那我认证不要了?)
解决
今天下午打开SpringSercurity上次的学习项目,又是折腾了一下午才发现问题
起因是今天再次进入项目时候还是想去解决它,不解决的话项目没办法进行
解决的方法很简单,看图,方框中的东西加上就可以了
总结
查找问题的时候一定要细心,要有根据的查,不要盲目的跟随百度,会误导你进入到别的问题里去,不过大多数时候还是先百度一下看看,因为前人栽树后人乘凉,你遇到的bug别人都遇到过。大家都一样的。
版权属于:不冷
本文链接:https://www.buleng.xyz/archives/197/
转载时须注明出处及本声明