spring-boot集成shiro+jwt框架,有git源码地址
项目大体框架
项目整体框架使用springboot + mybatis-plus + shiro +jwt,实现了简单的htpp传输加密,日志,防止xss攻击(没啥用),令牌桶,参数验证,统一异常处理。
shiro+jwt
具体实现请看代码,这里就不做截图了:
1.唯一注意的是shiroRealm里面注入的对象要么使用springApplicaionContext直接获取,使用@Autowired注入一定要使用懒加载,不然会出现事务失效,缓存失效,AOP失效问题,原因二次代理问题。
2.这里反向操作,filter里面所有接口全都拦截,添加@pass注解的接口不需要token验证。具体实现请看代码。
3.加密这里建议使用更好点的,公私钥啊这种,具体实现看个人。我这里用的AES麻烦在APPSCAN每次扫描都说加密太简单,贼烦。
4.令牌桶用的是guava里面的,使用和实现简单,至于为啥写到常量类,哎 sonar扫描说不规范,逼着修改,这个令牌桶不支持集群部署,如果集群部署估计要用到redis或者中间键吧。。
5.ErrorController的作用是拦截filter里面的异常,让异常按照指定格式返回,统一异常处理器在filetr里面不生效,具体请百度。
6.单点登录这里没实现,具体实现也简单,通过redis存token,就能实现,写个拦截器或者直接在过滤器里面写都行,登录账号当键,token当值,直接判断就好了,注意的是由于拦截器和过滤器都是在容器初始话之前执行,@Autowired注入的redistemplated对象会为空,可以使用util中的springApplicaionContext获取。网上还有其他办法,都行。
装饰器模式实现整体aop切面操作
一样如上,代码就不截图了,因为使用了http传输加密,只能在service做参数验证,这里参数验证使用AOP,为啥直接丢注解不行呢,因为协议不支持,只支持在controller,具体请百度。
文件上传使用FastDFS
接口已经实现,请自行部属,修改下配置文件地址就好了。
swagger
配置了,能直接用。
工具类
找了点蛮好用的工具类放里面的,可以用的,很多不放主要是sonar和APPSCAN,哎
项目地址
https://github.com/zhangtaodashabi/spring-boot-shiro-jwt