diff --git a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/ApiTokenInterceptor.java b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/ApiTokenInterceptor.java index ab64ee4..c4be0ea 100644 --- a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/configurator/interceptor/ApiTokenInterceptor.java +++ b/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; + } + + } } diff --git a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java b/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java index dd4bfc4..cdee061 100644 --- a/data-center-business-controller/src/main/java/com/techsor/datacenter/business/controller/CommonController.java +++ b/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") diff --git a/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/common/RedisApiTokenInfo.java b/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/common/RedisApiTokenInfo.java index bd21924..3a58a60 100644 --- a/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/common/RedisApiTokenInfo.java +++ b/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; } diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/CommonService.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/CommonService.java index 38f7106..6dc56ff 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/CommonService.java +++ b/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); } diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApiAuthServiceImpl.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApiAuthServiceImpl.java index 2582e25..0af933b 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/ApiAuthServiceImpl.java +++ b/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)); } } diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/CommonServiceImpl.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/CommonServiceImpl.java index 9094735..28034fd 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/CommonServiceImpl.java +++ b/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 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 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 deviceInfoVOs = new ArrayList<>(); try { Map 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 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 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 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 finalResponseVOs = new ArrayList<>(); List riliPersonaDeviceInfoVOs = new ArrayList<>(); @@ -1399,21 +1361,8 @@ public class CommonServiceImpl implements CommonService { List riliPersonaDeviceSearchParams = new ArrayList<>(); List dpfDeviceSearchParams = new ArrayList<>(); - // Select DB by apikey - Map 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 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 riliPersonaList = getRiliPersonaList(); @@ -1451,7 +1400,7 @@ public class CommonServiceImpl implements CommonService { if (deviceIdList.size() > 0) { Map 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 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 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 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 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 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 deviceInfoVOs = new ArrayList<>(); try { Map 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); diff --git a/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/ApiContext.java b/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/ApiContext.java index 60f292b..9c24750 100644 --- a/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/ApiContext.java +++ b/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 TOP_COMPANY_ID_HOLDER = new ThreadLocal<>(); + // 当前公司 ID private static final ThreadLocal COMPANY_ID_HOLDER = new ThreadLocal<>(); + // API Key + private static final ThreadLocal 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(); } -} - +} \ No newline at end of file diff --git a/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/SimpleJwtTokenUtil.java b/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/SimpleJwtTokenUtil.java index 508441f..1455946 100644 --- a/data-center-business-util/src/main/java/com/techsor/datacenter/business/util/SimpleJwtTokenUtil.java +++ b/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()); } /**