用户鉴权
基本介绍
鉴权(authentication)是指验证用户是否拥有访问系统的权利。
本框架中接口的鉴权有两种方式,一种是注解鉴权,一种是路由拦截。
注解鉴权
注解鉴权 —— 优雅的将鉴权与业务代码分离!详细文档
java
- @SaCheckLogin: 登录校验 —— 只有登录之后才能进入该方法。
- @SaCheckRole("admin"): 角色校验 —— 必须具有指定角色标识才能进入该方法。
- @SaCheckPermission("user:add"): 权限校验 —— 必须具有指定权限才能进入该方法。
- @SaCheckSafe: 二级认证校验 —— 必须二级认证之后才能进入该方法。
- @SaCheckBasic: HttpBasic 校验 —— 只有通过 Basic 认证后才能进入该方法。
- @SaIgnore:忽略校验 —— 表示被修饰的方法或类无需进行注解鉴权和路由拦截器鉴权。
- @SaCheckDisable("comment"):账号服务封禁校验 —— 校验当前账号指定服务是否被封禁。
拦截器鉴权
拦截器鉴权 —— 全局统一配置! 详细文档
java
/**
* 无需登录的接口地址集合
*/
private static final String[] NO_LOGIN_PATH_ARR = {
/* 主入口 */
"/",
/* 静态资源 */
"/favicon.ico", "/doc.html", "/webjars/**", "/swagger-resources/**", "/v2/api-docs", "/v2/api-docs-ext",
"/configuration/ui", "/configuration/security", "/ureport/**", "/druid/**", "/**/js/**", "/**/css/**",
"/**/plugins/**", "/**/images/**",
/* 认证相关 */
"/sso/userinfo", "/sso/auth", "/sso/doLogin", "/sso/checkTicket", "/sso/login", "/sso/signout",
"/sso/logout", "/sso/logoutCall", "/sso/org/change", "/**/login", "/oauth2/**",
/* 其他 */
"/error", "/actuator/**", "/test/**"
};
/**
* 仅超管使用的接口地址集合
*/
private static final String[] SUPER_PERMISSION_PATH_ARR = {
};
/**
* B端要排除的
*/
private static final String[] EXCLUDE_PERMISSION_PATH_ARR = {};
/**
* 注册跨域过滤器
*/
@Bean
public SaServletFilter getSaServletFilter() {
return new SaServletFilter()
// 指定拦截路由
.addInclude("/**")
// 设置鉴权的接口
.setAuth(r -> {
// B端的接口校验B端登录
SaRouter.match("/**")
// 排除无需登录接口
.notMatch(CollectionUtil.newArrayList(NO_LOGIN_PATH_ARR))
// 排除接口
.notMatch(CollectionUtil.newArrayList(EXCLUDE_PERMISSION_PATH_ARR))
// 校验B端登录
.check(r1 -> StpUtil.checkLogin());
// B端的超管接口校验B端超管角色
SaRouter.match("/**")
// 排除无需登录接口
.notMatch(CollectionUtil.newArrayList(NO_LOGIN_PATH_ARR))
// 匹配超管接口
.match(CollectionUtil.newArrayList(SUPER_PERMISSION_PATH_ARR))
// 校验B端超管角色 超级管理元角色为1
.check(r1 -> StpUtil.checkRole("1"));
})
// 异常处理
.setError(e -> {
// 由于过滤器中抛出的异常不进入全局异常处理,所以必须提供[异常处理函数]来处理[认证函数]里抛出的异常
// 在[异常处理函数]里的返回值,将作为字符串输出到前端,此处统一转为JSON输出前端
SaResponse saResponse = SaHolder.getResponse();
saResponse.setHeader(Header.CONTENT_TYPE.getValue(),
ContentType.JSON + ";charset=" + CharsetUtil.UTF_8);
return GlobalExceptionUtil.getCommonResult((Exception) e);
});
}