基于过滤拦截技术实现的身份认证方案
系统基本流程
- 用户发送请求
- 过滤器过滤掉,访问需要保持登录状态的资源但是又没有携带token的请求
- 拦截器拦截掉,访问需要具备相应权限的资源但是又没有对应权限的请求
- 进入业务逻辑
代码层级
config
MyFilterConfig:自定义过滤器的基础配置,对所有资源都进行过滤
MyInterceptorConfig:自定义拦截器的基础配置,设置所需拦截的放行的URL
controller
UserController:接口层
entity
User:用户的实体对象。目前为了简化操作,不必新建权限表,所以在用户的实体对象里存放了list<String>集合,即用户的属性里就带着用户的所有权限信息
filter:
MyFilter:自定义过滤器,这块主要是判断用户请求有没有携带token,如果没有携带token,而且还访问的是需要携带token(即保持登录)的接口,那么就过滤掉用户的这次请求。但是,有的资源是属于开放资源,即不需要用户保持登录状态,因此,在这个模块,做了白名单列表,过滤器不对白名单列表进行过滤。
interceptor
MyInterceptor:自定义拦截器,这块主要是拦截需要权限的接口,获取用户的token,并且解析出用户权限信息,拿用户权限信息和接口所需权限进行比对,失败则拒绝,成功则让请求进行接口层。
service
UserService:接口所对应的具体业务逻辑,这块目前主要是有判断用户名密码,进而生成token,返回前端。
util
JWTUtil:JWT工具类,可以用于生成JWT,解密JWT