1.前言
文章主要说明安全框架在当前BI各个服务中的用法。bi的各个服务指:im/itorder/qa/track等等。
2.导入依赖
<dependency>
<groupId>com.yurun</groupId>
<artifactId>yurun-common-security</artifactId>
</dependency>
3.配置文件
①redis配置的导入(必须)
extensionConfigs[4]:
dataId: redis.yaml
group: PUBLIC_GROUP
②设置需要认证访问的接口和拒绝所有人访问的接口(如果不需要可以忽略这部分配置)
yurun:
security:
#禁止访问的url
deny-all-url-patterns: /IM130101,/IM130102
#需要认证后(登录后)访问的
need-auth-url-patterns: /IM130103
4.如何获取用户的ID和from信息?
1.OauthSecurityUtils工具类
public static String getUserId() | 获取userId,若无登录信息返回null |
---|---|
public static String getUserFrom() | 获取from字段,若无登录信息返回null |
public static LoginUser getLoginUser() | 获取LoginUser对象,里面有userId和from,若无登录信息返回null |
2.使用代码
//获取LoginUser对象
LoginUser loginUser = OauthSecurityUtils.getLoginUser();
//获取userId
userId=loginUser.getUserId();
//获取from
String from = loginUser.getFrom();
//获取userId
String userId1 = OauthSecurityUtils.getUserId();
//获取from
String userFrom = OauthSecurityUtils.getUserFrom();
5.如何指定方法需要的权限
@PreAuthorize("@ss.hasPermi('im:invoice:add')")
你的Controller层的方法
你的controller接口需要什么权限,替换’im:invoice:add’ 即可。
6.注意点
1.接口只有钉钉端使用,原来一套不用动,userId从”token”字段取出来,userId为钉钉id
2.接口web和钉钉共用的,先尝试从认证信息中读取,若读取为空,再从”token”字段读取。
public Object queryProjects(@RequestHeader(value = HttpHeaderConstants.TOKEN) String userId,
@RequestHeader(value = HttpHeaderConstants.WEB_CHANNEL) String channel,
@RequestHeader(value = HttpHeaderConstants.PROJECT_SIGN) String projectSign) {
LoginUser loginUser = OauthSecurityUtils.getLoginUser();
if(StringUtils.isNotNull(loginUser)){
userId=loginUser.getUserId();
}
//.........
}