今天完成了尚硅谷视频spring security的学习。整理一下我在整合前后端把项目跑起来时遇到的问题。一开始前端页面报错sass有错,百度卸载重装sass即可。后来登录有问题后台报错
Invalid bound statement (not found): com.atguigu.aclservice.mapper.PermissionMapper.selectAllPermissionValue
关于这个问题已经遇到多次 ,绑定有问题 。仔细检查mapper和对应的xml并没有错,百度粘贴以下代码到pom文件 ,看解释说这里是因为xml不在resource文件夹下面。
<build>
<resources>
<resource>
<!-- xml放在java目录下-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置(xml放在resources下,可以不用指定)-->
<!--<resource>-->
<!--<directory>src/main/resources</directory>-->
<!--</resource>-->
</resources>
</build>
这个问题解决了,又出现了新的问题,点击登录后一直在转圈然后返回超时异常,debug两遍发现执行到将用户权限存入redis后没有再执行了,以为是chain.doFilter没写,其实并不是(本案例就不用写),这时想到去redis查一下是否已经存入用户名及权限信息,原来之前redis客户端没有开启,开启后就可以了。
就在我登录之后没有跳转,只是Message了成功,这里应该是做了router拦截,去看了前端代码没找到拦截的那一段,琢磨了一下,我返回的R 的code和视频里不一样,于是去把code改了。
然后就是最后一个问题了,点击登录,message了一个失败和error,后台空指针了,去看了一下是代码写错了。redis获取权限列表是根据username,我写成了token,修改后终于大功告成!!
private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
//从header获取token
String token = request.getHeader("token");
if(token!=null){
//从token获取用户名
String username = tokenManager.getUserInfoByToken(token);
//从redis获取权限列表
List<String> permissions =(List<String>) redisTemplate.opsForValue().get(username);
List<GrantedAuthority> authorities = new ArrayList<>();