不冷博客

解决authenticate之后的代码不执行(一直认证失败),authenticate为空

昨天使用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别人都遇到过。大家都一样的。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »