基于angular5+angular-cli+typeScript+rxjs+bootstrap+adminLTE,践行angular最佳实践。过程中node,webpack等有用到过,但我不熟。。。
基于springboot+apacheshiro+mybatis框架,restful风格api,自定义状态码,json-web-token,druid数据库连接池,swagger文档生成,redis存储refreshtoken和动态秘钥,maven,MD5单向加密和AES双向等。。。
这个nginx作为反向代理服务器,解决了跨域请求的问题。另一个nginx作为angular应用服务器,tomcat作为bootshiro的服务器。
流程长这样~
对加密认证签发,api动态权限,token过期刷新,前后端交互等等实现的细节,慢慢更。
jwt包含头信息,载荷信息,签名信息三个部分:
jwt签发解析使用的是jjwt,maven导入如下:
为啥说是真正的restful风格集成,虽说shiro对rest不友好但他本身是有支持rest集成的filter--HttpMethodPermissionFilter,这个shirorest的风格拦截器,会自动根据请求方法构建权限字符串(GET=read,POST=create,PUT=update,DELETE=delete)构建权限字符串;eg:/users=rest[user],会自动拼接出user:read,user:create,user:update,user:delete”权限字符串进行权限匹配(所有都得匹配,isPermittedAll)。
这里就涉及到了token的超时刷新问题,解决方案看图:
这困扰了我很久哎,直到我用到了angualr的HttpInterceptor哈哈哈哈哈哈哈哈哈哈哈哈哈哈。
angualr的HttpInterceptor就是前端的拦截过滤器,发起请求会拦截处理,接收请求也会拦截处理。最大的好处对每次的原始request他都会完整的保存下来,我们向后台发生的request是他的clone。next.handle(request.clone)继承HttpInterceptor的AuthInterceptor,拦截response判断是否为refreshtoken,是则携带新token再次发起保存的request: