Appearance
鉴权框架封装模块 ¶
介绍
基于Sa-Token
和justAuth
进行封装,未选择Spring Security原因是复杂度较高,且同时对在前后端分离环境下支持一般。未选择Shiro
是因为Sa-Token
已经足够成熟, API对中小项目来说更加直观和简单易用。注意:管理员用户拥有最高的权限,不受权限控制,默认拥有所有数据和接口的权限。
Sa-Token官网:https://sa-token.cc/
justAuth官网:https://justauth.wiki/
更详细的内容可以查看 身份识别与访问管理 下的具体模块,有更详细的说明。
功能 ¶
- 提供账号密码登陆功能
- 提供第三方登录扩展
- 支持配置多端登录
- 支持忽略鉴权注解
@IgnoreAuth
的功能支持 - 支持通过权限码来控制接口是否可以请求
- 支持通过配置请求资源与角色关系来控制是否可以请求
- 提供
PasswordEncoder
密码工具类和SecurityUtil
安全工具类
TokenService登录服务 ¶
认证相关服务的封装类,用于处理接收到的用户登录请求,并根据传输过来的数据选择对应的处理方式。其中client
和loginType
参数必须传输:
核心接口说明 ¶
AbstractAuthentication ¶
抽象认证器,是各类认证器的根接口,UsernamePasswordAuthentication
和OpenIdAuthentication
都是它的子接口, 如果要扩展新的登录方式,通常是实现它或者他的子接口和继承它的实现类。例如短信登录PhoneLoginHandler
就是实现的这个接口。
GetAuthClientService ¶
用来获取认证终端的接口声明,在登录处理时,需要知道当前是哪类终端进行的登录,所以这个接口必须要被实现,并且注册到Bean
容器中,否则无法进行登录流程, 项目也无法启动。目前IAM
模块已做实现。
GetAuthLoginTypeService ¶
用来获取认证登录方式对象的声明,在登录处理时,需要知道当前是哪种登录方式,所以这个接口必须要被实现,并且注册到Bean
容器中,否则无法进行登录流程, 项目也无法启动。目前IAM
模块已做实现。
OpenIdAuthentication ¶
AbstractAuthentication
接口的一个实现,主要用在封装第三方登录的场景,例如企业微信、钉钉、QQ等方式。配合ThirdLoginService
服务类可以快速接入新的第三方登录, 可以参照系统中已完成的DingTalkLoginHandler
、WeChatLoginHandler
、WeComLoginHandler
等处理类。
RouterCheck ¶
路由拦截检查,接收到用户访问的请求后,依次通过各实现类的check
方法判定返回的true
或false
,来控制是否放行请求,目前已经有下列实现:
IgnoreAdminUserRouterCheck
超级管理员跳过各种限制IgnoreAnnotationRouterCheck
注解方式过滤判定IgnorePathRouterCheck
跳过不启用权限控制的路径UserPathRouterCheck
用户是否拥有路径访问方式检查PermCodeRouterCheck
权限码方式请求路径拦截
UsernamePasswordAuthentication ¶
通过实现该接口,就可以实现认证鉴权中最经典的用户账号密码登录,目前系统中PasswordLoginHandler
类实现了该接口。
注解和工具类 ¶
@IgnoreAuth ¶
忽略鉴权注解,可以加在Controller
的方法或类上,访问时不在进行鉴权,加在非Controller
的地方无效,在Controller
类和方法同时添加此注解时,以方法上的注解为准,注解配置如下:
ignore
是否忽略请求鉴权,默认为true
,未登录也可以访问login
只要登录就忽略权限校验, 在ignore
为false
时生效,默认为false
@IgnoreAuth(Sa-Token自带注解) ¶
忽略认证:表示被修饰的方法或类无需进行注解认证和路由拦截认证
请注意:此注解的忽略效果只针对 SaInterceptor拦截器 和 APO注解鉴权 生效,对自定义拦截器与过滤器不生效
@PermCode ¶
权限码注解,在认证中主要用来控制哪些用户和角色可以访问,通过在Controller
类或者它的方法上标注此注解,就可以对访问权限进行控制。
请注意: 加在非
Controller
的地方无效,在Controller
类和方法同时添加此注解时,以方法上的注解为准。
PasswordEncoder ¶
密码编码工具类,对原始密码进行摘要加密,通常用在注册、修改密码、重置密码等场合。
SecurityUtil ¶
安全工具类,主要功能就是用来获取当前登录用户的信息。
第三方登录 ¶
TIP
主要基于OpenIdAuthentication
接口进行实现,然后通过ThirdLoginController
来处理生成授权页与接收三方登录的回调消息。 目前已经对接了微信公众平台
、微信开放平台
、钉钉
、企业微信
四种,其中微信公众平台跟其他的不太一致, 需要查看第三方平台对接中的说明。
认证的过程基本上都是OAuth
方式,可以阅读justAuth官网的文档进行了解,地址:OAuth流程
配置说明 ¶
yaml
bootx.starter.auth:
# 盐值
salt: yanzhi
# 默认密码
defaultPassword: 123456
# 开启超级管理员,开启后可以登录超级管理员账号,超级管理员有系统中最高的权限。推荐生产模式关闭此选项
enableAdmin: true
# 不进行鉴权的路径
ignoreUrls:
- '/actuator/**'
- '/v2/api-docs'
- '/doc.html'
- '/webjars/**'
# 第三方登录
third-login:
ding-talk:
# 登录成功后的回调地址
redirect-uri: http://127.0.0.1:9999/auth/third/callback/dingTalk
# 客户端Secret:对应各平台的appSecret
client-secret: ??
# 客户端id:对应各平台的appKey
client-id: ??
we-com:
redirect-uri: http://127.0.0.1:9999/auth/third/callback/weCom
client-secret: ??
client-id: ??
# 企业微信,授权方的网页应用ID
agent-id: ??
# 微信开放平台
we-chat-open:
redirect-uri: http://127.0.0.1:9999/auth/third/callback/weChat
client-id: ??
client-secret: ??