本博客仅记录Zjgsu-CheckIn在开发中遇到的各类问题与对应解决方法。
一:如何根据给定的json数据生成对应的二维码?
解决方案:利用zxing(Java实现的多种格式的1D/2D条码图像处理库)先将对应的json数据转化为BufferedImage流,再将其根据一定尺寸生成base64的字符串,供前后台使用。
二:如何在网页端导出表格供用户下载?
解决方案:采用poi-ooxml(基于java的Excel处理软件)可以将对应的数据生成一个.xls的表格文件并提供给用户下载。
三:管理员端连接后端出现CROS跨域错误
解决方案:在每个接口处添加语句:**@CrossOrigin(origins = “*”)**即任何IP都可以访问。
四:管理员端如何将密码加密:
解决方案:采用jbcrypt算法加密,与传统的加密算法,如RSA算法相比,jbcrypt算法不需要将密码转化为明文再判断,而是直接与密文进行一个类似按位或的操作即可。在生成密文的同时绑定一个随机大小的盐值,实现加密,如:
明文:123456
密文:$2a$11$RLF0yV0uEoHY9fHO8vddt.gBmzRqPVeGTYG.XmcWdPBDt1fU9MvKi
五:网页向后台发送post请求时出现Error 500,get则正常。
解决方案:将post的数据外加上Json.stringfy(),将json类转化为字符串,从而使后端能成功接收并转化为json。
同理,对于不变的json类可以通过加双引号使其变为字符串。
六:驼峰转换导致的请求无效的bug
解决方案:采用guava内置的CaseFormat来完成快速的驼峰转换,节省代码量与开发时间。
七:使用Mybatis向数据库中添加记录时获取主键的问题
在对应Mapper的方法上添加**@Options(useGeneratedKeys = true, keyProperty = “XXX”, keyColumn = “XXX”)**,将创建完的记录的主键直接注入对应的类中。
八:后台网页数据需要分页显示
采用PageHelper,支持多字段排序与分页,减小开发难度与花费时间。
另外,为了保证接口的可复用性,对于所有返回列表的接口,都采用分页采用非必要传入的方法。即
对于current(当前页),pageSize(页大小),sorter(排序规则)三个参数而言,
前两个必须同时为空或同时不为空,同时为空时current=1,pageSize=回传的列表大小。
sorter可以为空,也可以支持多字段查询,格式为
“字段1:ascend(升序)/descend(降序),字段2:ascend(升序)/descend(降序)…”
同时,为了避免过多重复的机械劳动,编写了工具类ListPageUtil,内置分页和封装两个方法。使用时仅需调用即可,非常便利。
九:小程序上线后出现无法连接后端的情况
解决方案:后端服务器需要有域名,因此购买域名并备案即可。
十:实现用户无法多地同时登陆与异地登录时下线的功能
解决方案:采用Redis,通过完成对用户名、用户身份(微信小程序用户/管理员)和Token的映射来完成登录时的安全性,可以有效防止CSRF攻击。
**Token采用随机生成的uuid,重复率极低。保证每个用户的Token都不相同。**因此,Token是用户的唯一身份标识,因此部分需要用户信息的接口不需要传用户id、用户名等敏感数据,更加方便与安全。
同时,为了保证用户不能在多地同时登陆,在上述基础上增加反映射,即token和用户名、用户身份的映射。
例如用户A登录某账号,获得TokenA,那么此时TokenA->账号和账号->TokenA的映射就会建立,如果此时用户B登录了同一账号,那么该映射会变为TokenB->账号和账号->TokenB,那么用户A在使用该账号时就会因为他持有的TokenA没有对应的账号而失去权限。
十一、Jenkins 创建Maven项目时没有webHook选项
选择freestyle的自定义项目即可
十二、构建Jenkins出现大量maven-compiler-plugin缺失问题
调整maven-compiler-plugin的版本号
十三、打包时出现程序包com.sun.istack.internal不存在
排查后发现@NotNull 导入的包是错误的,应是org.jetbrains.annotations.NotNull
十四、Jenkins使用sudo命令移动时显示没有权限
sudo vi /etc/sudoers
jenkins ALL=(ALL) NOPASSWD: ALL//设置无需密码即可操作
systemctl restart jenkins
十五、 如何在微信小程序端发送multipart/form-data的数据?
分析multipart/form-data的数据格式,并利用字符串的拼凑完成数据的封装
十六、出现PageHelper排序失效的bug
经过多方排查,发现初始PageSize过大,当设置如INT_MAX等值时会失效,现已修改为100000。
十七、小程序端出现必须要让wx.request同步的场景
添加Promise,Async,Await