尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【电商项目】测试 认证功能 遇到的问题与解决方案

【电商项目】测试 认证功能 遇到的问题与解决方案 目录一、测试类运行报错程序包不存在Java找不到符号)二、测试出现错误报错2.1 未关闭CSRF防护2.2 resultMap和resultType2.3 空指针在测试之前要可以保留鉴权注解 PreAuthorize 。此处给生疏的小伙伴解释一下对接口进行鉴权配置用户拥有权限才能访问接口PreAuthorize作用就是用来校验当前登录用户有没有指定权限 / 角色没有就直接拦截不让进入接口方法。测认证登录时只验证能不能登录成功不校验权限注解不影响登录流程。因为之前对增删改查的测试数据库包含了脏数据。测试之前我清空了管理员表管理员角色表角色表角色权限表权限表通过这次测试重新添加数据并排查bug。这是重点一会要烤一、测试类运行报错程序包不存在Java找不到符号)首先我们需要手动添加一个管理员。因为五张表已经全部清空了我们没有办法登录到内部去操作数据。在认证授权的代码中我们对密码进行了BCryptpasswordEncoder加密所以注意 数据库中添加的管理员密码 应为加密后的数据添加数据保存后会自增id。我们通过测试类来去获取密文。完成后运行出现了下面的报错。程序包***不存在Java找不到符号符号类 SpringBootTest可能最大原因有以下几种缺少 JUnit5 测试依赖项目 pom.xml 没引入spring-boot-starter-test测试起步依赖。SpringBootTest 导入包版本错乱Maven 依赖未刷新引入依赖后没刷新 Maven、没重新导入IDEA 本地依赖缓存失效。测试目录结构不规范小编排查后发现我属于测试目录结构不规范 目录标识缺失双重问题我的源代码目录是一个 java 目录不是整个项目在源代码目录里面测试类无法运行。所以 Maven 的test作用域依赖不会给这个目录使用JUnit、SpringTest 类直接找不到操作是右上角小齿轮打开项目结构把整个项目勾选为源正常已经没有问题了但是测试时还是报错了显示密码不对后来一看是忘实例化 BCryptpasswordEncoder 对象了这里打上断点是为了看得清楚重新弄完记得给数据库的错误密文修改了。二、测试出现错误报错2.1 未关闭CSRF防护开启CSRF防护默认开启需手动关掉就会报403异常。403 代表你账号登录身份是有效的但服务端判定这次 POST、PUT 这类改数据的请求是伪造的跨站恶意请求开启 CSRF 校验后缺少防伪 token 就直接拒绝放行所以返回权限禁止的403。喜欢思考的小伙伴这时候就有疑问了比如我那如果真的是跨站恶意请求CSRF关了那不就完蛋了吗我们后续开发会给这个打开首先啊这个完蛋想得没错关闭 CSRF 等于放弃了跨站伪造请求防护黑客可以借助你已登录的浏览器 Cookie在第三方恶意页面直接调用你的修改、删除、提交接口在你不知情的情况下篡改账号数据。不过这是一个前后端分离项目它是直接永久关闭 CSRF的。因为前后端分离项目用 TokenJWT做身份校验不存在 Cookie 盗用发起跨站请求的条件CSRF 防护完全多余还徒增接口调试麻烦。补充一点针传统服务端渲染页面Thymeleaf/JSP 页面是必须开启 CSRF。 这种的页面由后端渲染表单自动携带 csrf 令牌能直接挡住跨站表单伪造攻击。2.2 resultMap和resultType依旧报错首先我确定用户名和密码一定是正确的哈。报错信息如下解释很直接就能看出来是映射文件有问题它要把permission封装成一个resultMap但permission是resultType。已修改后加黄标注这里给模糊的小伙伴区分一下这俩货虽然图示已经很清晰了ResultType直接指定实体类全路径字段与实体同名直接映射简单单表查询用。写法最简但无法处理关联集合、别名自定义映射。ResultMap手动配置映射自定义字段与实体属性对应关系支持一对一、一对多 collection 嵌套关联查询适配字段错位、一对多嵌套查询可复用映射配置。2.3 空指针其他都是边角料这个才是我最想反馈出来的问题。这和开头清空五张表有关系。意思非常明确permissions集合集合里包含了null空元素。当我们尝试对这个空元素调用.getUrl()方法抛出空指针异常NullPointerException说白了就是没数据呗。排查建议集合中出现null元素通常意味着业务逻辑或数据库查询存在问题。检查数据库查询如果是通过 MyBatis 或 JPA 查询出的permissions列表检查 SQL 语句是否使用了LEFT JOIN左连接。左连接在右表没有匹配记录时会产生null行这可能导致映射到 Java 对象时出现null对象。检查数据组装逻辑手动往permissions集合中进行过add(null)的操作。终于到了激动人心我最想说的part了聪明的小伙伴已经知道我想说什么了开篇小编就说过我清空了五张表管理员表管理员角色表角色表角色权限表权限表所以我们新增的这个用户是没有任何权限的这就是空指针的原因。我们需要添加条件判断代码不为空时再遍历permission。这里还需要磨叽一下mybatisPlus封装空集合非常有意思permissions不为空而且它这个元素个数不为0而是1。这里debug给大家看一下如图可知permissions集合个数为1我有一个元素该元素为空所以添加条件判断不能说permissions为空或者是0。那我们怎么判断呢如下图标黄判断第一个元素不为空就可以啦。改这个报错的时候我这个初出茅庐的小茅庐感觉自己超像这个哈哈哈
返回列表