1.前言

文章主要说明安全框架在当前BI各个服务中的用法。bi的各个服务指:im/itorder/qa/track等等。

2.导入依赖

  1. <dependency>
  2. <groupId>com.yurun</groupId>
  3. <artifactId>yurun-common-security</artifactId>
  4. </dependency>

3.配置文件

①redis配置的导入(必须)

  1. extensionConfigs[4]:
  2. dataId: redis.yaml
  3. group: PUBLIC_GROUP

②设置需要认证访问的接口和拒绝所有人访问的接口(如果不需要可以忽略这部分配置)

  1. yurun:
  2. security:
  3. #禁止访问的url
  4. deny-all-url-patterns: /IM130101,/IM130102
  5. #需要认证后(登录后)访问的
  6. 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.使用代码

  1. //获取LoginUser对象
  2. LoginUser loginUser = OauthSecurityUtils.getLoginUser();
  3. //获取userId
  4. userId=loginUser.getUserId();
  5. //获取from
  6. String from = loginUser.getFrom();
  7. //获取userId
  8. String userId1 = OauthSecurityUtils.getUserId();
  9. //获取from
  10. String userFrom = OauthSecurityUtils.getUserFrom();

5.如何指定方法需要的权限

  1. @PreAuthorize("@ss.hasPermi('im:invoice:add')")
  2. 你的Controller层的方法

你的controller接口需要什么权限,替换’im:invoice:add’ 即可。

6.注意点

1.接口只有钉钉端使用,原来一套不用动,userId从”token”字段取出来,userId为钉钉id
2.接口web和钉钉共用的,先尝试从认证信息中读取,若读取为空,再从”token”字段读取。

  1. public Object queryProjects(@RequestHeader(value = HttpHeaderConstants.TOKEN) String userId,
  2. @RequestHeader(value = HttpHeaderConstants.WEB_CHANNEL) String channel,
  3. @RequestHeader(value = HttpHeaderConstants.PROJECT_SIGN) String projectSign) {
  4. LoginUser loginUser = OauthSecurityUtils.getLoginUser();
  5. if(StringUtils.isNotNull(loginUser)){
  6. userId=loginUser.getUserId();
  7. }
  8. //.........
  9. }