Github开源项目guns的jwt接口开发使用

      接口安全是至关重要的,一直在学习框架并写接口,面对各种攻击以及非法访问,我们要做一些防护措施。最近,想自己做移动端的东西,免不了考虑接口安全,初次了解jwt,并一次次的摸索,也是有了一些了解。
      而后看到github上有一个集成springboot+ssm+mybatis plus +shiro的guns开源项目,下载下来以后他的目录结构是非常清晰的。此处我们只看guns-rest模块,也就是移动端接口的开发使用。
(注:此处只是入门,大佬请绕行^^)
      (对于jwt的理解还不够深刻,不足之处还望见教。)如下是想的目录结构:
Github开源项目guns的jwt接口开发使用_第1张图片
      首先我们来看下项目大致流程,在com.stylefeng.guns.rest.modular.auth.controller;中有一个AuthController,这个controller就是前端请求用来生成token的,目前这个例子传的参数是AuthRequest类,里面有username和password两个属性,这是需要传入的用户名和密码。 然后里面验证是boolean validate = reqValidator.validate(authRequest);这句话,我们找这个接口,他有两个实现类SimpleValidator(静态定义数据的验证)DbValidator(从数据库拿到值做验证对比),验证成功以后,会生成token和randomKey,这两个值就是返回数据。
     接下来我们看com.stylefeng.guns.rest.modular.auth.filter;下的AuthFilter,他是拦截除了AuthController以外所有的请求路径,这时候就需要我们在post请求的header头部传入token,验证token是否正确才会继续执行。而token相应的key也就是名字是在com.stylefeng.guns.rest.config.properties;JwtProperties中定义的。我们看这个配置类中有private String header = "Authorization";这样一句,故而名字为Authorization,而传入的token还需要带上Bearer ,这是jwt的规范,而AuthFilter对此也做了验证。
     继续com.stylefeng.guns.rest.modular.example;下有个例子,我们打开会发现这里传入了一个类SimpleObject的对象,SimpleObject类里面定义了一些测试属性。我们打开maven的test,就是测试下面,找到com.stylefeng.guns.jwt;下的DecryptTest类,这个类模拟了生成需要传入的前端数据。最终传入的是BaseTransferEntity类,这个类是在com.stylefeng.guns.rest.modular.auth.converter;下,里面有一个object属性,就是我们需要传入的数据,sign属性就是签名,验证数据是否合法。
     我们来看一下DecryptTest,看一下数据是如何处理的。首先是将所需要传的数据生成一个simpleObject对象,也就是一个json。接着将他tostring变为字符串,再转为base64编码,这就生成了需要传入的第一项object。第二项是将这串base64编码进行md5加密生成签名(sign),盐值就是我们请求AuthController拿到的randomKey(这是随机生成的六位字符串)。
     在com.stylefeng.guns.rest.modular.auth.converter;下的WithSignMessageConverter将我们传入的object和sign进行签名验证,并解析object中的数据。然后再继续执行到controller拿到数据。
     流程基本是这样,其中所用到的一些类以及方法仔细揣摩可以看懂的。
     文笔有些粗糙,讲解多有不到之处。我在demo中加入了自己对于权限的一些理解,并做了一些整改,加上了权限控制的过滤器。(本人一名小白,代码写的十分粗糙,还有一些没有修整完备)
demo百度云地址:
链接:https://pan.baidu.com/s/1BNrTY2aFQEV2GUfNDB4TXw
提取码:h574

你可能感兴趣的:(java,web,springboot,guns开源项目,jwt接口开发)