最近接了个外包,主要是针对于驾校开发一个代理小程序。目的是为了方便驾校的管理来招揽学员,同时方便维护学员和代理信息。
本项目的业务需求比较少,是一个传统项目,核心的业务点是权限管理,这里我就采用比较规范的RBAC权限模型来开发。由于项目比较小,这里我就没有采用Shiro或SpringSecurity等权限管理框架,而是自己使用过滤器开发了一套。我认为这可以算是权限管理的雏形,如果有更复杂的权限管理需求,可以很方便的基于此扩展。
首先认证方面,我这里仍然采用jwt token的认证方式。这里我默认实现了记住密码的功能。即用户第一次登陆成功之后返回一个token在response header中,该token的有效期为2小时,服务器端我保存一个有效期为1周的refresh token。用户在2个小时之内登录不会返回token,2个小时和一周之内第一次携带过期token我会返回新的token在response header。一周之外refresh token失效,这里需要用户重新登录。 这里我也是借鉴了别人的思路: segmentfault.com/a/119000001…
权限管理方面,我这里共用了4张表,其实基准的RBAC权限模型最少要5张表。这里比较简单,所以我主要是用户表、角色表、权限表以及权限角色表。用户和角色是一对一的关联关系、角色和权限是一对多的关系。表结构如下:
@ServletComponentScan(basePackages = "com.beautifulsoup.driving")
和 @WebFilter
及 @Order
注解,但是这里的 @Order
并不能实现多个Filter的顺序性,无奈我只能采用 FilterRegistrationBean
来注入Filter,同时请求第一步进入的是Filter且其不被Spring管理,故而不能通过 @Autowired
注解只能构造方法注入。Filter内部用ThreadLocal保存用户信息,校验用户的权限,ThreadLocal作为线程级别对象,对于SpringSecurity中的用户信息保存也是基于此的。