一、使用Spring Security+JWT 框架实现登录功能
JwtTokenUtil 根据负载生成JWT Token 从token中获取JWT中的负载
配置SpringSecurity configure//基于token,不需要session //允许登录访问 //除上面外,所有请求都要求认证 //禁用缓存//添加jwt 登录授权过滤器 //添加自定义未授权和未登录结果返回
添加自定义未授权及未登录的结果返回 当未登录或者token失效时访问接口时,自定义的返回结果
首先是登录的时候会先通过JwtloginFilter获取到的参数会封装成jwtlogintoken,然后又jwtauthenticationprovider来判断token是不是正确的,如果是正确的话会通过jwtloginsuccesshandler返回正确信息,如果是错误的话会通过jwtloginfailurehandler返回错误信息。
访问某个路劲的时候jwttokenfilter会拦截你的请求判断你的token是不是合法的,如果token不是合法的会返回错误信息,如果token是合法的会通过jwtFilterInvocationSercurityMetadataSource判断当前路径所需的角色列表,然后通过jwtaccessdecisionmanager判断是否具备所需的角色,如果不具有的话jwtaccessdeniedhandler会返回错误信息,具备的话会允许访问
二、RBAC角色模型
一个用户拥有若干角色,每一个角色拥有若干权限
拦截器中判断
权限数据库设计
1.hr表是用户表,存放了用户的基本信息。
2.role是角色表,name字段表示角色的英文名称,按照SpringSecurity的规范,将以ROLE_
开始,nameZh字段表示角色的中文名称。
3.menu表是一个资源表,该表涉及到的字段有点多,由于我的前端采用了Vue来做,因此当用户登录成功之后,系统将根据用户的角色动态加载需要的模块,所有模块的信息将保存在menu表中,menu表中的path、component、iconCls、keepAlive、requireAuth等字段都是Vue-Router中需要的字段,也就是说menu中的数据到时候会以json的形式返回给前端,再由vue动态更新router,menu中还有一个字段url,表示一个url pattern,即路径匹配规则,假设有一个路径匹配规则为/admin/**
,那么当用户在客户端发起一个/admin/user
的请求,将被/admin/**
拦截到,系统再去查看这个规则对应的角色是哪些,然后再去查看该用户是否具备相应的角色,进而判断该请求是否合法。