当前位置:   article > 正文

如何快速搭建专属你的权限系统?来看看这儿怎么做的吧!!!_myauth

myauth

前言

相信想自己独立写一个小项目的小伙伴们可能最烦人的就是写登录,认证,权限模块了,小编呢花了些时间写了一个小starter(依赖于springboot)来帮你们快速完成自己的小项目,由于时间比较忙,目前只开发了部分了功能,更多功能后面会迭代更新,今天也是想和大家分享分享自己的成果。

一、注解@Authority

由于时间原因,目前只开发了权限认证模块,该注解可以注解在你的Controller控制器上,如果这样,那么该控制器所有的接口都被校验需要@Authority注解所需的权限;注解在接口上则只是该接口的访问需要@Authority注解所指定的权限。

注解讲解

@Authority注解开发的思想来源于经典的用户-角色-权限的模型,因此权限接口需要指定两个参数:roles和auths,即:角色-权限,比如:/delete,接口的作用是删除一个指定用户的信息,但是该接口需要manger角色+delete权限,或者:root角色+delete权限,(可以指定多个角色,权限),才可以请求该接口,那么当一个请求过来时,需要先校验当前请求,就是因为这个校验的过程总是会花费巨多精力去完善业务,现在,只需一个·@Authority注解即可完成!!!

二、使用步骤

1.导jar包的形式、maven管理

jar包/git地址在文末!!!

2.基础配置

配置及其简单!!!只需简单几步:

一:引入模块!
二,配置你的权限接口,即那些接口需要被拦截认证
三,选择认证模式

默认模式为token模式,即需要根据token来鉴权,(选择这种模式你应该去配置你的请求头,即在那个请求头里写入你的toekn),比如在用户登录后,配发一个toekn给用户,下次用户访问权限接口时就必须在请求头中带上这个token(注意这个请求头的key必修是你在配置文件中配置的tokenName),之后再进行校验。

四,加密你的token

版本1还不支持多种加密和自定义加密,没有加入的原因是因为觉得不需要,因为myauth加密使用的消息摘要算法和对称加密(AES)的方式,因此就没有引入。在用户登录后,你应该将用户的角色权限信息封装为一个AuthEntity类,之后使用该类的toString()方法得到字符串,最好使用AuthTokenEncrypt类的getEncryptToken()方法加密你的token,由于采用的是上述算法,因此如果你想修改默认的加密key和token签发者,你需要再额外配置,想必大多数人都会重新配置吧,哈哈哈~~~

五,使用@Authority注解标识你的权限接口

写到这儿你就已经完成了一个快速的权限认证系统!!而你只需要关心你的业务资源层即可!!!

my-auth:
  config:
     #配置你的拦截接口
     auth-urls:  
      - /hello
      - /logSys
      - /test
     #配置你的请求头
     token-name: myAuthToken
     #如果想修改token签发者,这儿配置
     signature: YbyMyAuth
     #修改加密的key,必须是16位
     key: YbyMyAuthStarter
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

三,配置进阶

(一),配置日志

没错!!!作者开发了一个简单的日志系统,这个日志是业务层面上的记录,就是它会对每次认证都会进行一次记录,记录当前认证整个过程!!
由于作者觉得这个日志是业务层面上的,因此默认配置了不开启,虽然日志记录对请求开销不大(经受了10000次的不间断力测试!!!),使用日志和不使用日志,10000次的请求平均响应耗时只有100毫秒的差距,日志底层采用的缓冲流,io操作很少。

my-auth:
  config:
    #开启日志记录
    log: true
  • 1
  • 2
  • 3
  • 4
(二),配置认证处理器

如果你不想在认证完后使用默认的处理,你可以自定义你自己的处理器,你只需继承指定的类即可。默认提供了四个处理器:

#认证成功处理器
DefaultAuthSuccessHandler
#认证失败(没有操作当前权限接口的权限)
DefaultAuthFailHandler
#token过期处理器(只有是token模式才会走此处理器)
DefaultAuthTokenExpireHandler
#认证异常处理器
DefaultAuthExpHandler
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

你只需继承上面的类,覆盖父类的方法,然后配置你的实现类路径即可。
重要重要重要!!!!!在覆盖父类方法后,如果不调用父类方法则即使开启了日志也不会在进行日志记录,为什么留这么个bug呢,不能解决吗?当然能,只是不想,因为不想使用JDK或者CGLIB动态代理去做日志切面,因为不想让myauth依赖太多第三方库,JDK也是觉得会影响性能就没有(AspectJ也没有用),而且,覆盖父类方法后,你也是可以手动进行日志记录的,只需要在你的处理器中调用日志方法即可:

AccessLog.getInstance().log(handlerEntity); //这个参数在你继承上述处理器后覆盖的方法中有。
  • 1

即使你不想这么做,你自己写一个切面或者切入你原来的日志切面中去。
关于日志的一般性配置,大家应该都是了解的,日志文件多大时选择文件切割,日志时间格式,日志路径等,(不指定路径默认在当前根路径下)。

(四),选择适配器模式AdapterMode

上面讲述了默认的token模式,你也可以自定义模式,只需继承这个抽象类并覆写抽象方法即可,这个抽象方法要求返回一个AuthEntity实体的对象,这个对象需要你去写入当前访问者的权限角色信息,已及认证状态。

四,关于myauth的一些设计思想

由于后面的版本会开拓许多功能,多到甚至不再需要你写登录,权限认证模块!!!但是也会因此让myauth对第三方比较依赖,由于还在思考怎么写,就还没加入很多功能。设计思想主要是任务派发模式,如果你debug一下,会发现debug不管怎么走最后一定是回到HandlerDispenser这个类,所有的处理均是由该类决定,会根据上一个处理结果动态派发任务。同时,看下面的包可知,有很多处理模块,权限注解处理模块,权限注解校验器模块,匹配模式模块,结果处理器模块,每个模块之间完全解耦,其关系依赖任务派发器,模块内部采用的策略设计模式。最后,完全解耦特性以及自定义单例模式,交给spring管理的bean只有SpringMvc的配置和AuthProperties,ConfigurationDriver这三个bean,对spring管理bean的压力几乎没有,所有必要的bean由自定义单例注册表管理。
在这里插入图片描述

五,写在最后的话

如果你看到了这里,真的是对小编的莫大的鼓励!!有时候真的很想放弃,觉得写这些没有什么意义,为什么,权限框架有SpringSecurity,Shiro等非常优秀的框架,但是学习的意义是什么???对我而言,只是热爱,放弃很容易,但坚持下来一定很爽!!!
最重要的事情:git地址:
git远程代码仓库
注意!!!由于很多功能还在写,因此有些还没写完,慢慢更新吧!!!
如果你也想和小编一起做如此无聊的事情,后台私信小编哦!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/301586
推荐阅读
相关标签
  

闽ICP备14008679号