Browse Source

对外api要先走apikey通过一个接口拿token,然后用token来走api查询数据

jwy
review512jwy@163.com 6 days ago
parent
commit
321cf0d3e8
  1. 54
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/ApiTokenInterceptor.java
  2. 99
      data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java
  3. 1
      data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/common/RedisApiTokenInfo.java
  4. 24
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/CommonService.java
  5. 6
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApiAuthServiceImpl.java
  6. 166
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/CommonServiceImpl.java
  7. 32
      data-center-business-util/src/main/java/com/techsor/datacenter/business/util/ApiContext.java
  8. 3
      data-center-business-util/src/main/java/com/techsor/datacenter/business/util/SimpleJwtTokenUtil.java

54
data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/ApiTokenInterceptor.java

@ -6,11 +6,12 @@ import com.techsor.datacenter.business.util.redis.RedisUtil;
import com.techsor.datacenter.business.vo.common.RedisApiTokenInfo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.Map;
@Component
public class ApiTokenInterceptor implements HandlerInterceptor {
@ -23,9 +24,24 @@ public class ApiTokenInterceptor implements HandlerInterceptor {
HttpServletResponse response,
Object handler) throws Exception {
// 只有 HandlerMethod(Controller 方法)才处理
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 判断方法或类上是否有 @ApiTokenRequired
boolean methodAnnotated = handlerMethod.getMethodAnnotation(ApiTokenRequired.class) != null;
boolean classAnnotated = handlerMethod.getBeanType().getAnnotation(ApiTokenRequired.class) != null;
if (!methodAnnotated && !classAnnotated) {
return true; // 没加注解,直接放行
}
String auth = request.getHeader("Authorization");
if (auth == null || !auth.startsWith("Bearer ")) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
writeUnauthorized(response, "Missing token");
return false;
}
@ -34,15 +50,19 @@ public class ApiTokenInterceptor implements HandlerInterceptor {
Object tokenInfo = redisUtil.get(redisKey);
if (null == tokenInfo){
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
writeUnauthorized(response, "Token expired or invalid");
return false;
}
RedisApiTokenInfo redisApiTokenInfo = JSON.parseObject(tokenInfo.toString(), RedisApiTokenInfo.class);
Long companyId = redisApiTokenInfo.getTopCompanyId();
ApiContext.setCompanyId(companyId);
try {
RedisApiTokenInfo redisApiTokenInfo = JSON.parseObject(tokenInfo.toString(), RedisApiTokenInfo.class);
ApiContext.setCompanyId(redisApiTokenInfo.getCompanyId());
ApiContext.setTopCompanyId(redisApiTokenInfo.getTopCompanyId());
ApiContext.setApiKey(redisApiTokenInfo.getApiKey());
} catch (Exception e) {
writeUnauthorized(response, "Token data invalid");
return false;
}
return true;
}
@ -53,5 +73,23 @@ public class ApiTokenInterceptor implements HandlerInterceptor {
Exception ex) {
ApiContext.clear();
}
private void writeUnauthorized(HttpServletResponse response, String msg) throws Exception {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(new ErrorResponse(401, msg)));
}
@Getter
private static class ErrorResponse {
private final int code;
private final String msg;
public ErrorResponse(int code, String msg) {
this.code = code;
this.msg = msg;
}
}
}

99
data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java

@ -3,10 +3,12 @@ package com.techsor.datacenter.business.controller;
import java.util.List;
import com.techsor.datacenter.business.configurator.interceptor.AccessRequired;
import com.techsor.datacenter.business.configurator.interceptor.ApiTokenRequired;
import com.techsor.datacenter.business.dto.common.RepostRoidParams;
import com.techsor.datacenter.business.dto.common.api.*;
import com.techsor.datacenter.business.dto.common.roidproblemreport.ProblemReportsSummariesSearchParams;
import com.techsor.datacenter.business.service.ApiAuthService;
import com.techsor.datacenter.business.util.ApiContext;
import com.techsor.datacenter.business.vo.common.ApiTokenVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -140,28 +142,34 @@ public class CommonController{
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried asset information
*/
@ApiTokenRequired
@Operation(summary = "Query asset information")
@RequestMapping(value = "/queryAssetInfo", method = RequestMethod.POST)
public SimpleDataResponse queryAssetInfo(
@RequestBody MonitoringAssetSearchParams queryAssetSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAssetInfo(Apikey, queryAssetSearchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryAssetInfo(Authorization, queryAssetSearchParams);
}
@ApiTokenRequired
@Operation(summary = "Query space information")
@RequestMapping(value = "/querySpaceInfo", method = RequestMethod.POST)
public SimpleDataResponse querySpaceInfo(
@RequestBody ApiSpaceSearchParams searchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.querySpaceInfo(Apikey, searchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.querySpaceInfo(Authorization, searchParams);
}
@ApiTokenRequired
@Operation(summary = "Query space information by floor info")
@RequestMapping(value = "/querySpaceInfoList", method = RequestMethod.POST)
public SimpleDataResponse querySpaceInfoList(
@RequestBody ApiSpaceSearchParams searchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.querySpaceInfoList(Apikey, searchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.querySpaceInfoList(Authorization, searchParams);
}
/**
@ -186,12 +194,14 @@ public class CommonController{
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried asset information
*/
@ApiTokenRequired
@Operation(summary = "Query asset information by class")
@RequestMapping(value = "/queryAssetInfoByClass", method = RequestMethod.POST)
public SimpleDataResponse queryAssetInfoByClass(
@RequestBody ApiAssetSearchByClassParams apiAssetSearchByClassParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAssetInfoByClass(Apikey, apiAssetSearchByClassParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryAssetInfoByClass(Authorization, apiAssetSearchByClassParams);
}
/**
@ -200,12 +210,14 @@ public class CommonController{
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried alarm devices information
*/
@ApiTokenRequired
@Operation(summary = "Query alarm devices information")
@RequestMapping(value = "/queryAlarmDevice", method = RequestMethod.POST)
public SimpleDataResponse queryAlarmDevice(
@RequestBody ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryAlarmDevice(null, Apikey, apiAlarmDeviceSearchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryAlarmDevice(null, Authorization, apiAlarmDeviceSearchParams);
}
/**
@ -214,20 +226,24 @@ public class CommonController{
* @param Apikey API key for authentication
* @return a SimpleDataResponse containing the queried alarm devices information
*/
@ApiTokenRequired
@Operation(summary = "Query Device Classification")
@RequestMapping(value = "/queryClass",method = RequestMethod.POST)
public SimpleDataResponse queryClass(
@RequestBody ApiAssetClassSearchParams apiAssetClassSearchParams,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "123456")) @RequestHeader(required=true) String Apikey){
return commonService.queryClass(Apikey, apiAssetClassSearchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryClass(Authorization, apiAssetClassSearchParams);
}
@ApiTokenRequired
@Operation(summary = "Query Device Classification")
@RequestMapping(value = "/problem-reports/summaries",method = RequestMethod.POST)
public SimpleDataResponse problemReportsSummaries(
@RequestBody ProblemReportsSummariesSearchParams params,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "123456")) @RequestHeader(required=true) String Apikey){
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
//Only for test use, For staging env
if (openApiMock.equals("true")){
params.setBuildingName("東京建物日本橋ビル");
@ -236,7 +252,7 @@ public class CommonController{
// params.setStartDate("2024-08-30 12:50:46");
// params.setEndDate("2024-09-12 12:50:46");
//test end
return commonService.problemReportsSummaries(Apikey, params);
return commonService.problemReportsSummaries(Authorization, params);
}
/**
@ -254,13 +270,15 @@ public class CommonController{
queryDataFor2D3D.setApikey(Apikey);
return commonService.query2D3D(queryDataFor2D3D);
}
@ApiTokenRequired
@Operation(summary = "Endpoint for 2D-3D platform data integration")
@RequestMapping(value = "/queryKanriRoidMaintenanceRecord", method = RequestMethod.POST)
public SimpleDataResponse queryKanriRoidMaintenanceRecord(
@RequestBody QueryDataFor2D3D queryDataFor2D3D,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required = true) String Apikey) {
queryDataFor2D3D.setApikey(Apikey);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
queryDataFor2D3D.setApikey(ApiContext.getApiKey());
return commonService.query2D3D(queryDataFor2D3D);
}
@ -336,14 +354,16 @@ public class CommonController{
return commonService.repostRoidV1(param,CompanyId,LanguageType);
}
@ApiTokenRequired
@Operation(summary = "Query devices information for Rili")
@RequestMapping(value = "/device/queryDeviceInfo", method = RequestMethod.POST)
public SimpleDataResponse queryDeviceInfo(
@RequestBody ApiRiliDeviceSearchParams apiRiliDeviceSearchParams,
@Parameter(name="Apikey",description ="Apikey",required=false,schema = @Schema(defaultValue = "RjV5ZTZBeFArekMxM2hlekFjWnlmZz09")) @RequestHeader(required=true) String Apikey) {
return commonService.queryDeviceInfo(Apikey, apiRiliDeviceSearchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryDeviceInfo(Authorization, apiRiliDeviceSearchParams);
}
@ -363,39 +383,44 @@ public class CommonController{
return commonService.getTemporaryLink(getFileTemporaryParams, LanguageType);
}
@ApiTokenRequired
@Operation(summary = "batch get temporary link")
@RequestMapping(value = "/getS3FileUrl", method = RequestMethod.POST)
public SimpleDataResponse getS3FileUrl(
@RequestBody BatchGetFileTemporaryParams batchGetFileTemporaryParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.getS3FileUrl(batchGetFileTemporaryParams, Apikey);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.getS3FileUrl(batchGetFileTemporaryParams, Authorization);
}
@ApiTokenRequired
@Operation(summary = "add building")
@RequestMapping(value = "/addBuilding", method = RequestMethod.POST)
public SimpleDataResponse addBuilding(
@RequestBody AddBuildingParams addBuildingParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.addBuilding(addBuildingParams, Apikey);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.addBuilding(addBuildingParams, Authorization);
}
@ApiTokenRequired
@Operation(summary = "query building")
@RequestMapping(value = "/queryBuilding", method = RequestMethod.POST)
public SimpleDataResponse queryBuilding(
@RequestBody QueryBuilding queryBuilding,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey
){
return commonService.queryBuilding(queryBuilding, Apikey);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryBuilding(queryBuilding, Authorization);
}
@ApiTokenRequired
@Operation(summary = "Query information of devices with cancelled alarm")
@RequestMapping(value = "/queryCancelAlarmDevice", method = RequestMethod.POST)
public SimpleDataResponse queryCancelAlarmDevice(
@RequestBody ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams,
@Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
return commonService.queryCancelAlarmDevice(null, Apikey, apiAlarmDeviceSearchParams);
// @Parameter(name = "Apikey", description = "API key", required = false, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Apikey) {
@Parameter(name = "Authorization", description = "auth token", required = true, schema = @Schema(defaultValue = "123456")) @RequestHeader(required = true) String Authorization) {
return commonService.queryCancelAlarmDevice(null, Authorization, apiAlarmDeviceSearchParams);
}
@PostMapping("/auth/token")

1
data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/common/RedisApiTokenInfo.java

@ -7,6 +7,7 @@ import lombok.Data;
@AllArgsConstructor
public class RedisApiTokenInfo {
private String apiKey;
private Long companyId;
private Long topCompanyId;
}

24
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/CommonService.java

@ -39,7 +39,7 @@ public interface CommonService {
SimpleDataResponse logEmailSentResult(JSONObject jsonObj);
SimpleDataResponse queryAssetInfo(String apikey, MonitoringAssetSearchParams queryAssetSearchParams);
SimpleDataResponse queryAssetInfo(String authorization, MonitoringAssetSearchParams queryAssetSearchParams);
SimpleDataResponse queryDeviceInfo(String apikey, DeviceSearchParams deviceSearchParams);
@ -55,37 +55,37 @@ public interface CommonService {
SimpleDataResponse query2D3D(QueryDataFor2D3D queryDataFor2D3D);
SimpleDataResponse queryAssetInfoByClass(String apikey, ApiAssetSearchByClassParams apiAssetSearchByClassParams);
SimpleDataResponse queryAssetInfoByClass(String authorization, ApiAssetSearchByClassParams apiAssetSearchByClassParams);
SimpleDataResponse queryAlarmDevice(Long companyId, String apikey, ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams);
SimpleDataResponse queryAlarmDevice(Long companyId, String authorization, ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams);
SimpleDataResponse getVersion();
ResponseSetThresholdV1 checkTargetIds(TargetIds targetIds);
SimpleDataResponse queryClass(String apikey, ApiAssetClassSearchParams apiAssetClassSearchParams);
SimpleDataResponse queryClass(String authorization, ApiAssetClassSearchParams apiAssetClassSearchParams);
SimpleDataResponse problemReportsSummaries(String apikey, ProblemReportsSummariesSearchParams params);
SimpleDataResponse problemReportsSummaries(String authorization, ProblemReportsSummariesSearchParams params);
SimpleDataResponse repostRoidV1(RepostRoidParams param, Long companyId, Integer languageType);
SimpleDataResponse queryDeviceInfo(String apikey, ApiRiliDeviceSearchParams apiRiliDeviceSearchParams);
SimpleDataResponse queryDeviceInfo(String authorization, ApiRiliDeviceSearchParams apiRiliDeviceSearchParams);
SimpleDataResponse updateTargetDataSources(JSONObject jsonObj);
SimpleDataResponse getTemporaryLink(GetFileTemporaryParams getFileTemporaryParams, Integer languageType);
SimpleDataResponse querySpaceInfo(String apikey, ApiSpaceSearchParams searchParams);
SimpleDataResponse querySpaceInfo(String authorization, ApiSpaceSearchParams searchParams);
SimpleDataResponse getS3FileUrl(BatchGetFileTemporaryParams batchGetFileTemporaryParams, String apikey);
SimpleDataResponse getS3FileUrl(BatchGetFileTemporaryParams batchGetFileTemporaryParams, String authorization);
SimpleDataResponse addBuilding(AddBuildingParams addBuildingParams, String apikey);
SimpleDataResponse addBuilding(AddBuildingParams addBuildingParams, String authorization);
SimpleDataResponse queryBuilding(QueryBuilding queryBuilding, String apikey);
SimpleDataResponse queryBuilding(QueryBuilding queryBuilding, String authorization);
SimpleDataResponse queryCancelAlarmDevice(Long companyId, String apikey,
SimpleDataResponse queryCancelAlarmDevice(Long companyId, String authorization,
ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams);
SimpleDataResponse querySpaceInfoList(String apikey, ApiSpaceSearchParams searchParams);
SimpleDataResponse querySpaceInfoList(String authorization, ApiSpaceSearchParams searchParams);
}

6
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApiAuthServiceImpl.java

@ -46,14 +46,14 @@ public class ApiAuthServiceImpl implements ApiAuthService {
Long topCompanyId = dataSourceInterceptor.getTopCompanyId(companyId+"");
String token = "Bearer " + SimpleJwtTokenUtil.generate();
String token = SimpleJwtTokenUtil.generate();
String redisKey = "api:token:" + token;
redisUtil.set(redisKey, JSON.toJSONString(new RedisApiTokenInfo(apiKey, topCompanyId)));
redisUtil.set(redisKey, JSON.toJSONString(new RedisApiTokenInfo(apiKey, companyId, topCompanyId)));
redisUtil.expire(redisKey, TOKEN_EXPIRE_SECONDS);
return SimpleDataResponse.success(new ApiTokenVO(token, TOKEN_EXPIRE_SECONDS));
return SimpleDataResponse.success(new ApiTokenVO("Bearer " + token, TOKEN_EXPIRE_SECONDS));
}
}

166
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/CommonServiceImpl.java

@ -376,25 +376,16 @@ public class CommonServiceImpl implements CommonService {
* @return SimpleDataResponse containing the queried asset information or error response
*/
@Override
public SimpleDataResponse queryAssetInfo(String apikey, MonitoringAssetSearchParams pageSearchParam) {
public SimpleDataResponse queryAssetInfo(String authorization, MonitoringAssetSearchParams pageSearchParam) {
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
if (StringUtils.isBlank(pageSearchParam.getSymbol()) ||
(StringUtils.isBlank(pageSearchParam.getBuildingName()) && StringUtils.isBlank(pageSearchParam.getUdfBuildingId()))) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "symbol or buildingName/udfBuildingId is required");
}
ApikeyInfo2 companyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
long companyId = companyInfo.getId();
long companyId = ApiContext.getCompanyId();
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
if (StringUtils.isBlank(pageSearchParam.getCompanyIds())) {
pageSearchParam.setCompanyIdList(Arrays.asList(companyId));
@ -817,22 +808,13 @@ public class CommonServiceImpl implements CommonService {
* or failure response on error
*/
@Override
public SimpleDataResponse queryAssetInfoByClass(String apikey,
public SimpleDataResponse queryAssetInfoByClass(String authorization,
ApiAssetSearchByClassParams apiAssetSearchByClassParams) {
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
ApikeyInfo2 companyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
long companyId = companyInfo.getId();
long companyId = ApiContext.getCompanyId();
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
if (StringUtils.isBlank(apiAssetSearchByClassParams.getCompanyIds())) {
apiAssetSearchByClassParams.setCompanyIdList(Arrays.asList(companyId));
@ -865,7 +847,7 @@ public class CommonServiceImpl implements CommonService {
* or failure response on error
*/
@Override
public SimpleDataResponse queryAlarmDevice(Long companyId, String apikey, ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams) {
public SimpleDataResponse queryAlarmDevice(Long companyId, String authorization, ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams) {
String hashKey = "lambda_device_alarm";
@ -874,13 +856,10 @@ public class CommonServiceImpl implements CommonService {
List<ApiAlarmDeviceInfoVO> deviceInfoVOs = new ArrayList<>();
try {
Map<String, Object> paramMap = new HashMap<>();
if (null != companyId) {
paramMap.put("companyId", companyId);
} else {
paramMap.put("apikey", apikey);
ApikeyInfo2 selfInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
companyId = selfInfo.getId();
if (null == companyId) { //针对api接口
companyId = ApiContext.getCompanyId();
}
paramMap.put("companyId", companyId);
Long topCompanyId = dataSourceInterceptor.getTopCompanyId(companyId+"");
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX +topCompanyId);
@ -1059,21 +1038,12 @@ public class CommonServiceImpl implements CommonService {
}
@Override
public SimpleDataResponse queryClass(String apikey, ApiAssetClassSearchParams apiAssetClassSearchParams) {
public SimpleDataResponse queryClass(String authorization, ApiAssetClassSearchParams apiAssetClassSearchParams) {
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
ApikeyInfo2 companyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
long companyId = companyInfo.getId();
long companyId = ApiContext.getCompanyId();
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
if (StringUtils.isBlank(apiAssetClassSearchParams.getCompanyIds())) {
apiAssetClassSearchParams.setCompanyIdList(Arrays.asList(companyId));
@ -1133,16 +1103,8 @@ public class CommonServiceImpl implements CommonService {
* @return
*/
@Override
public SimpleDataResponse problemReportsSummaries(String apikey, ProblemReportsSummariesSearchParams params) {
public SimpleDataResponse problemReportsSummaries(String authorization, ProblemReportsSummariesSearchParams params) {
try {
//apikey验证
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
if (StringUtils.isBlank(params.getBuildingName()) && StringUtils.isBlank(params.getUdfBuildingId())) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "buildingName or udfBuildingId is required");
}
@ -1151,7 +1113,7 @@ public class CommonServiceImpl implements CommonService {
}
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
//资产关联的设备的targetId获取
List<TargetIdOfAssetVO> targetIdOfAssetList = basicMonitoringAssetMapperExt.getTargetIdListByAssetName(params);
@ -1201,7 +1163,7 @@ public class CommonServiceImpl implements CommonService {
return SimpleDataResponse.success(finalResponseList);
} catch (Exception e) {
logger.error("queryClass error", e);
logger.error("problemReportsSummaries error", e);
return SimpleDataResponse.fail(ResponseCode.SERVER_ERROR, ResponseCode.SERVER_ERROR_MSG);
}
@ -1387,7 +1349,7 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse queryDeviceInfo(String apikey, ApiRiliDeviceSearchParams allDeviceSearchParams) {
public SimpleDataResponse queryDeviceInfo(String authorization, ApiRiliDeviceSearchParams allDeviceSearchParams) {
// Split response by [Rili persona] and [dpf]
List<ApiRiliDeviceInfoVO> finalResponseVOs = new ArrayList<>();
List<ApiRiliDeviceInfoVO> riliPersonaDeviceInfoVOs = new ArrayList<>();
@ -1399,21 +1361,8 @@ public class CommonServiceImpl implements CommonService {
List<String> riliPersonaDeviceSearchParams = new ArrayList<>();
List<String> dpfDeviceSearchParams = new ArrayList<>();
// Select DB by apikey
Map<String, Object> apikeyParamMap = new HashMap<>();
apikeyParamMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(apikeyParamMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid", new ArrayList<>());
}
Map<String, Object> companySearchMap = new HashMap<>();
companySearchMap.put("apikey", apikey);
ApikeyInfo2 selfCompanyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(companySearchMap);
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
// Split deviceIds by [Rili persona] and [dpf]
List<RiliPersonnasLatest> riliPersonaList = getRiliPersonaList();
@ -1451,7 +1400,7 @@ public class CommonServiceImpl implements CommonService {
if (deviceIdList.size() > 0) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("deviceIdList", deviceIdList);
paramMap.put("companyId", selfCompanyInfo.getId());
paramMap.put("companyId", ApiContext.getCompanyId());
dpfDeviceInfoVOs = deviceInfoMapperExt.getRiliDeviceInfo(paramMap);
// Retrieve the set of DeviceId from DeviceInfoVOs
@ -1721,30 +1670,19 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse querySpaceInfo(String apikey, ApiSpaceSearchParams searchParams) {
public SimpleDataResponse querySpaceInfo(String authorization, ApiSpaceSearchParams searchParams) {
if (StringUtils.isBlank(searchParams.getUdfSpaceId()) || StringUtils.isBlank(searchParams.getUdfBuildingId())) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "udfSpaceId or udfBuildingId is required");
}
return getSpaceInfo(apikey, searchParams);
return getSpaceInfo(authorization, searchParams);
}
private SimpleDataResponse getSpaceInfo(String apikey, ApiSpaceSearchParams searchParams) {
private SimpleDataResponse getSpaceInfo(String authorization, ApiSpaceSearchParams searchParams) {
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
ApikeyInfo2 companyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
long companyId = companyInfo.getId();
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
searchParams.setCompanyIdList(Arrays.asList(companyId));
searchParams.setCompanyIdList(Arrays.asList(ApiContext.getCompanyId()));
List<ApiSpaceWithAssetVO> resultList = basicSpaceMapperExt.getApiQuerySpaceInfo(searchParams);
if (CollectionUtils.isNotEmpty(resultList)) {
@ -1780,31 +1718,23 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse querySpaceInfoList(String apikey, ApiSpaceSearchParams searchParams) {
public SimpleDataResponse querySpaceInfoList(String authorization, ApiSpaceSearchParams searchParams) {
if (StringUtils.isBlank(searchParams.getUdfFloorId()) || StringUtils.isBlank(searchParams.getUdfBuildingId())) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "udfFloorId or udfBuildingId is required");
}
return getSpaceInfo(apikey, searchParams);
return getSpaceInfo(authorization, searchParams);
}
@Override
public SimpleDataResponse getS3FileUrl(BatchGetFileTemporaryParams batchGetFileTemporaryParams, String apikey) {
public SimpleDataResponse getS3FileUrl(BatchGetFileTemporaryParams batchGetFileTemporaryParams, String authorization) {
if (CollectionUtils.isEmpty(batchGetFileTemporaryParams.getKeys())) {
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "keys required");
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
String bucketName = awsBucketAdress;
String accessKey = awsAccessKeyId;
@ -1895,20 +1825,11 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse addBuilding(AddBuildingParams addBuildingParams, String apikey) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
ApikeyInfo2 companyInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
long companyId = companyInfo.getId();
public SimpleDataResponse addBuilding(AddBuildingParams addBuildingParams, String authorization) {
long companyId = ApiContext.getCompanyId();
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
OptBuildingParams optBuildingParams = new OptBuildingParams();
optBuildingParams.setBuildingBucket(addBuildingParams.getBuildingBucket());
@ -1922,17 +1843,9 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse queryBuilding(QueryBuilding queryBuilding, String apikey) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("apikey", apikey);
ApikeyInfo2 apikeyInfo = commonOpt.getAuroraInfoByApikey(paramMap);
if (null == apikeyInfo) {
return SimpleDataResponse.fail(ResponseCode.MSG_ERROR, "Apikey is invalid");
}
public SimpleDataResponse queryBuilding(QueryBuilding queryBuilding, String authorization) {
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ apikeyInfo.getId());
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX+ ApiContext.getTopCompanyId());
BasicBuildingExample example = new BasicBuildingExample();
BasicBuildingExample.Criteria criteria = example.createCriteria();
@ -1960,7 +1873,7 @@ public class CommonServiceImpl implements CommonService {
@Override
public SimpleDataResponse queryCancelAlarmDevice(Long companyId, String apikey,
public SimpleDataResponse queryCancelAlarmDevice(Long companyId, String authorization,
ApiAlarmDeviceSearchParams apiAlarmDeviceSearchParams) {
String redisKey = "device_cancel_alarm";
// Create Jedis connection
@ -1968,13 +1881,10 @@ public class CommonServiceImpl implements CommonService {
List<ApiCancelAlarmDeviceInfoVO> deviceInfoVOs = new ArrayList<>();
try {
Map<String, Object> paramMap = new HashMap<>();
if (null != companyId) {
paramMap.put("companyId", companyId);
} else {
paramMap.put("apikey", apikey);
ApikeyInfo2 selfInfo = basicCompanyMapperExt.getAuroraInfoByApikey(paramMap);
companyId = selfInfo.getId();
if (null == companyId) {
companyId = ApiContext.getCompanyId();
}
paramMap.put("companyId", companyId);
Long topCompanyId = dataSourceInterceptor.getTopCompanyId(companyId+"");
DataSourceContextHolder.setCurrentDataSourceKey(Constants.DATASOURCE_PREFIX +topCompanyId);

32
data-center-business-util/src/main/java/com/techsor/datacenter/business/util/ApiContext.java

@ -2,18 +2,46 @@ package com.techsor.datacenter.business.util;
public class ApiContext {
// 顶级公司 ID
private static final ThreadLocal<Long> TOP_COMPANY_ID_HOLDER = new ThreadLocal<>();
// 当前公司 ID
private static final ThreadLocal<Long> COMPANY_ID_HOLDER = new ThreadLocal<>();
// API Key
private static final ThreadLocal<String> API_KEY_HOLDER = new ThreadLocal<>();
public static void setTopCompanyId(Long topCompanyId) {
TOP_COMPANY_ID_HOLDER.set(topCompanyId);
}
public static void setCompanyId(Long companyId) {
COMPANY_ID_HOLDER.set(companyId);
}
public static void setApiKey(String apiKey) {
API_KEY_HOLDER.set(apiKey);
}
public static void set(String apiKey, Long companyId, Long topCompanyId) {
API_KEY_HOLDER.set(apiKey);
COMPANY_ID_HOLDER.set(companyId);
TOP_COMPANY_ID_HOLDER.set(topCompanyId);
}
public static Long getTopCompanyId() {
return TOP_COMPANY_ID_HOLDER.get();
}
public static Long getCompanyId() {
return COMPANY_ID_HOLDER.get();
}
public static String getApiKey() {
return API_KEY_HOLDER.get();
}
public static void clear() {
API_KEY_HOLDER.remove();
COMPANY_ID_HOLDER.remove();
TOP_COMPANY_ID_HOLDER.remove();
}
}
}

3
data-center-business-util/src/main/java/com/techsor/datacenter/business/util/SimpleJwtTokenUtil.java

@ -7,6 +7,7 @@ import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.UUID;
public class SimpleJwtTokenUtil {
@ -21,7 +22,7 @@ public class SimpleJwtTokenUtil {
}
public static String generate() {
return generate(subject, secret);
return generate(subject, secret+ UUID.randomUUID().toString());
}
/**

Loading…
Cancel
Save