This commit is contained in:
pnoker
2024-12-29 14:51:24 +08:00
parent 3beccb2344
commit 265fcfe0bf
26 changed files with 254 additions and 228 deletions
@@ -75,7 +75,7 @@ public class DictionaryForAuthController implements BaseController {
@GetMapping("/limited_ip")
public Mono<R<List<DictionaryVO>>> limitedIpDictionary() {
try {
List<DictionaryBO> entityBOList = dictionaryForAuthService.limitedIpDictionary(getTenantId());
List<DictionaryBO> entityBOList = dictionaryForAuthService.limitedIpDictionary(getTenantId2());
List<DictionaryVO> entityVOList = dictionaryForAuthBuilder.buildVOListByBOList(entityBOList);
return Mono.just(R.ok(entityVOList));
} catch (Exception e) {
@@ -65,7 +65,7 @@ public class LimitedIpController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody LimitedIpVO entityVO) {
try {
LimitedIpBO entityBO = limitedIpBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
limitedIpService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -161,7 +161,7 @@ public class LimitedIpController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new LimitedIpQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<LimitedIpBO> entityPageBO = limitedIpService.selectByPage(entityQuery);
Page<LimitedIpVO> entityPageVO = limitedIpBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -184,6 +184,7 @@ public class UserLoginController implements BaseController {
Page<UserLoginVO> entityPageVO = userLoginBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
} catch (Exception e) {
log.error(e.getMessage(), e);
return Mono.just(R.fail(e.getMessage()));
}
}
@@ -199,6 +200,7 @@ public class UserLoginController implements BaseController {
try {
return Boolean.TRUE.equals(userLoginService.checkLoginNameValid(name)) ? Mono.just(R.ok()) : Mono.just(R.fail());
} catch (Exception e) {
log.error(e.getMessage(), e);
return Mono.just(R.fail(e.getMessage()));
}
}
@@ -88,4 +88,22 @@ public class RequestConstant {
throw new IllegalStateException(ExceptionConstant.UTILITY_CLASS);
}
}
/**
* 自定义请求 Key 相关常量
*
* @author pnoker
* @since 2022.1.0
*/
public static class Key {
/**
* 用户请求头关键字
*/
public static final String USER_HEADER = "USER_HEADER_KEY";
private Key() {
throw new IllegalStateException(ExceptionConstant.UTILITY_CLASS);
}
}
}
@@ -60,7 +60,7 @@ public class DeviceStatusController implements BaseController {
@PostMapping("/device")
public Mono<R<Map<Long, String>>> deviceStatus(@RequestBody(required = false) DeviceQuery deviceQuery) {
try {
deviceQuery.setTenantId(getTenantId());
deviceQuery.setTenantId(getTenantId2());
Map<Long, String> statuses = deviceStatusService.selectByPage(deviceQuery);
return Mono.just(R.ok(statuses));
} catch (Exception e) {
@@ -60,7 +60,7 @@ public class DriverStatusController implements BaseController {
@PostMapping("/driver")
public Mono<R<Map<Long, String>>> driverStatus(@RequestBody(required = false) DriverQuery driverQuery) {
try {
driverQuery.setTenantId(getTenantId());
driverQuery.setTenantId(getTenantId2());
Map<Long, String> statuses = driverStatusService.selectByPage(driverQuery);
return Mono.just(R.ok(statuses));
} catch (Exception e) {
@@ -64,7 +64,7 @@ public class PointValueController implements BaseController {
if (Objects.isNull(pointValueQuery)) {
pointValueQuery = new PointValueQuery();
}
pointValueQuery.setTenantId(getTenantId());
pointValueQuery.setTenantId(getTenantId2());
Page<PointValueBO> entityPageBO = pointValueService.latest(pointValueQuery);
Page<PointValueVO> entityPageVO = pointValueBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -24,7 +24,6 @@ import io.github.pnoker.common.entity.R;
import io.github.pnoker.common.entity.common.RequestHeader;
import io.github.pnoker.common.enums.EnableFlagEnum;
import io.github.pnoker.common.exception.UnAuthorizedException;
import io.github.pnoker.common.utils.DecodeUtil;
import io.github.pnoker.common.utils.JsonUtil;
import io.github.pnoker.common.utils.RequestUtil;
import lombok.extern.slf4j.Slf4j;
@@ -80,7 +79,7 @@ public class AuthenticGatewayFilter implements GatewayFilter, Ordered {
headers.set(RequestConstant.Header.X_AUTH_USER, JsonUtil.toJsonString(entityBO));
}).build();
exchange.mutate().request(build).build();
return chain.filter(exchange.mutate().request(build).build());
} catch (Exception e) {
log.error("AuthenticGatewayFilter error: {}, Url: {}", e.getMessage(), request.getURI(), e);
ServerHttpResponse response = exchange.getResponse();
@@ -89,8 +88,6 @@ public class AuthenticGatewayFilter implements GatewayFilter, Ordered {
DataBuffer dataBuffer = response.bufferFactory().wrap(JsonUtil.toJsonBytes(R.fail(e.getMessage())));
return response.writeWith(Mono.just(dataBuffer));
}
return chain.filter(exchange);
}
private GrpcRTenantDTO getTenantDTO(ServerHttpRequest request) {
@@ -76,7 +76,7 @@ public class DeviceController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody DeviceVO entityVO) {
try {
DeviceBO entityBO = deviceBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
deviceService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -168,7 +168,7 @@ public class DeviceController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DeviceQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DeviceBO> entityPageBO = deviceService.selectByPage(entityQuery);
Page<DeviceVO> entityPageVO = deviceBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -188,7 +188,7 @@ public class DeviceController implements BaseController {
public Mono<R<String>> importDevice(@Validated(Upload.class) DeviceVO entityVO, @RequestPart("file") Mono<FilePart> filePart) {
try {
DeviceBO entityBO = deviceBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
return filePart.flatMap(part -> {
String filePath = FileUtil.getTempPath() + FileUtil.getRandomXlsxName();
File file = new File(filePath);
@@ -67,7 +67,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.driverDictionary(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -89,7 +89,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.profileDictionary(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -111,7 +111,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.pointDictionaryForProfile(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -133,7 +133,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.pointDictionaryForDevice(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -155,7 +155,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.deviceDictionary(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -177,7 +177,7 @@ public class DictionaryForManagerController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DictionaryQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DictionaryBO> entityPageBO = dictionaryForManagerService.deviceDictionaryForDriver(entityQuery);
Page<DictionaryVO> entityPageVO = dictionaryForManagerBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -66,7 +66,7 @@ public class DriverAttributeConfigController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody DriverAttributeConfigVO entityVO) {
try {
DriverAttributeConfigBO entityBO = driverAttributeConfigBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
driverAttributeConfigService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -178,7 +178,7 @@ public class DriverAttributeConfigController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DriverAttributeConfigQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DriverAttributeConfigBO> entityPageBO = driverAttributeConfigService.selectByPage(entityQuery);
Page<DriverAttributeConfigVO> entityPageVO = driverAttributeConfigBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -68,7 +68,7 @@ public class DriverAttributeController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody DriverAttributeVO entityVO) {
try {
DriverAttributeBO entityBO = driverAttributeBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
driverAttributeService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -162,7 +162,7 @@ public class DriverAttributeController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new DriverAttributeQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<DriverAttributeBO> entityPageBO = driverAttributeService.selectByPage(entityQuery);
Page<DriverAttributeVO> entityPageVO = driverAttributeBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -69,7 +69,7 @@ public class DriverController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody DriverVO entityVO) {
try {
DriverBO entityBO = driverBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
driverService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -158,7 +158,7 @@ public class DriverController implements BaseController {
@GetMapping("/service/{serviceName}")
public Mono<R<DriverVO>> selectByServiceName(@NotNull @PathVariable(value = "serviceName") String serviceName) {
try {
DriverBO entityBO = driverService.selectByServiceName(serviceName, getTenantId());
DriverBO entityBO = driverService.selectByServiceName(serviceName, getTenantId2());
DriverVO entityVO = driverBuilder.buildVOByBO(entityBO);
return Mono.just(R.ok(entityVO));
} catch (Exception e) {
@@ -175,18 +175,17 @@ public class DriverController implements BaseController {
*/
@PostMapping("/list")
public Mono<R<Page<DriverVO>>> list(@RequestBody(required = false) DriverQuery entityQuery) {
try {
if (Objects.isNull(entityQuery)) {
entityQuery = new DriverQuery();
return getTenantId().flatMap(tenantId -> {
try {
DriverQuery query = Objects.isNull(entityQuery) ? new DriverQuery() : entityQuery;
query.setTenantId(tenantId);
Page<DriverBO> entityPageBO = driverService.selectByPage(query);
Page<DriverVO> entityPageVO = driverBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
} catch (Exception e) {
log.error(e.getMessage(), e);
return Mono.just(R.fail(e.getMessage()));
}
entityQuery.setTenantId(getTenantId());
Page<DriverBO> entityPageBO = driverService.selectByPage(entityQuery);
Page<DriverVO> entityPageVO = driverBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
} catch (Exception e) {
log.error(e.getMessage(), e);
return Mono.just(R.fail(e.getMessage()));
}
});
}
}
@@ -65,7 +65,7 @@ public class GroupController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody GroupVO entityVO) {
try {
GroupBO entityBO = groupBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
groupService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -139,7 +139,7 @@ public class GroupController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new GroupQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<GroupBO> entityPageBO = groupService.selectByPage(entityQuery);
Page<GroupVO> entityPageVO = groupBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -65,7 +65,7 @@ public class LabelController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody LabelVO entityVO) {
try {
LabelBO entityBO = labelBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
labelService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -139,7 +139,7 @@ public class LabelController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new LabelQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<LabelBO> entityPageBO = labelService.selectByPage(entityQuery);
Page<LabelVO> entityPageVO = labelBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -66,7 +66,7 @@ public class PointAttributeConfigController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody PointAttributeConfigVO entityVO) {
try {
PointAttributeConfigBO entityBO = pointAttributeConfigBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
pointAttributeConfigService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -199,7 +199,7 @@ public class PointAttributeConfigController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new PointAttributeConfigQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<PointAttributeConfigBO> entityPageBO = pointAttributeConfigService.selectByPage(entityQuery);
Page<PointAttributeConfigVO> entityPageVO = pointAttributeConfigBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -68,7 +68,7 @@ public class PointAttributeController implements BaseController {
public Mono<R<PointAttributeBO>> add(@Validated(Add.class) @RequestBody PointAttributeVO entityVO) {
try {
PointAttributeBO entityBO = pointAttributeBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
pointAttributeService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -162,7 +162,7 @@ public class PointAttributeController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new PointAttributeQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<PointAttributeBO> entityPageBO = pointAttributeService.selectByPage(entityQuery);
Page<PointAttributeVO> entityPageVO = pointAttributeBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -73,7 +73,7 @@ public class PointController implements BaseController {
public Mono<R<PointBO>> add(@Validated(Add.class) @RequestBody PointVO entityVO) {
try {
PointBO entityBO = pointBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
pointService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -201,7 +201,7 @@ public class PointController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new PointQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<PointBO> entityPageBO = pointService.selectByPage(entityQuery);
Page<PointVO> entityPageVO = pointBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -69,7 +69,7 @@ public class ProfileController implements BaseController {
public Mono<R<String>> add(@Validated(Add.class) @RequestBody ProfileVO entityVO) {
try {
ProfileBO entityBO = profileBuilder.buildBOByVO(entityVO);
entityBO.setTenantId(getTenantId());
entityBO.setTenantId(getTenantId2());
profileService.save(entityBO);
return Mono.just(R.ok(ResponseEnum.ADD_SUCCESS));
} catch (Exception e) {
@@ -179,7 +179,7 @@ public class ProfileController implements BaseController {
if (Objects.isNull(entityQuery)) {
entityQuery = new ProfileQuery();
}
entityQuery.setTenantId(getTenantId());
entityQuery.setTenantId(getTenantId2());
Page<ProfileBO> entityPageBO = profileService.selectByPage(entityQuery);
Page<ProfileVO> entityPageVO = profileBuilder.buildVOPageByBOPage(entityPageBO);
return Mono.just(R.ok(entityPageVO));
@@ -35,11 +35,12 @@ public interface ProfileService extends BaseService<ProfileBO, ProfileQuery> {
/**
* 根据 模板名称和模版类型 查询模版
*
* @param name 模板名称
* @param type 模板类型 {@link ProfileTypeFlagEnum}
* @param tenantId 租户ID
* @param name 模板名称
* @param type 模板类型 {@link ProfileTypeFlagEnum}
* @return ProfileBO
*/
ProfileBO selectByNameAndType(String name, ProfileTypeFlagEnum type);
ProfileBO selectByNameAndType(Long tenantId, String name, ProfileTypeFlagEnum type);
/**
* 根据 设备ID 查询模版
@@ -39,7 +39,6 @@ import io.github.pnoker.common.manager.entity.query.ProfileQuery;
import io.github.pnoker.common.manager.mapper.ProfileMapper;
import io.github.pnoker.common.manager.service.ProfileService;
import io.github.pnoker.common.utils.PageUtil;
import io.github.pnoker.common.utils.UserHeaderUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -124,11 +123,11 @@ public class ProfileServiceImpl implements ProfileService {
}
@Override
public ProfileBO selectByNameAndType(String name, ProfileTypeFlagEnum type) {
public ProfileBO selectByNameAndType(Long tenantId, String name, ProfileTypeFlagEnum type) {
LambdaQueryWrapper<ProfileDO> wrapper = Wrappers.<ProfileDO>query().lambda();
wrapper.eq(ProfileDO::getProfileName, name);
wrapper.eq(ProfileDO::getProfileTypeFlag, type);
wrapper.eq(ProfileDO::getTenantId, UserHeaderUtil.getUserHeader().getTenantId());
wrapper.eq(ProfileDO::getTenantId, tenantId);
wrapper.last(QueryWrapperConstant.LIMIT_ONE);
ProfileDO entityDO = profileManager.getOne(wrapper);
return profileBuilder.buildBOByDO(entityDO);
+6
View File
@@ -170,6 +170,12 @@
<groupId>io.github.pnoker</groupId>
<artifactId>dc3-common-exception</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>2.14.5</version>
</dependency>
</dependencies>
</project>
@@ -1,139 +0,0 @@
/*
* Copyright 2016-present the IoT DC3 original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.pnoker.common.utils;
import cn.hutool.core.thread.threadlocal.NamedThreadLocal;
import io.github.pnoker.common.constant.common.ExceptionConstant;
import io.github.pnoker.common.entity.common.RequestHeader;
import io.github.pnoker.common.exception.UnAuthorizedException;
import lombok.extern.slf4j.Slf4j;
import java.util.Objects;
/**
* 用户请求头 相关工具类
*
* @author pnoker
* @since 2022.1.0
*/
@Slf4j
public class UserHeaderUtil {
private static final ThreadLocal<RequestHeader.UserHeader> USER_HEADER_THREAD_LOCAL = new NamedThreadLocal<>("Request of user header");
private UserHeaderUtil() {
throw new IllegalStateException(ExceptionConstant.UTILITY_CLASS);
}
/**
* 获取用户请求头信息
*
* @return {@link RequestHeader.UserHeader}
*/
public static RequestHeader.UserHeader getUserHeader() {
RequestHeader.UserHeader entityBO = USER_HEADER_THREAD_LOCAL.get();
if (Objects.isNull(entityBO)) {
throw new UnAuthorizedException("Unable to get user header");
}
return entityBO;
}
/**
* 设置用户请求头信息
*
* @param entityBO {@link RequestHeader.UserHeader}
*/
public static void setUserHeader(RequestHeader.UserHeader entityBO) {
if (Objects.isNull(entityBO) || Objects.isNull(entityBO.getTenantId()) || Objects.isNull(entityBO.getUserId())) {
removeUserHeader();
} else {
USER_HEADER_THREAD_LOCAL.set(entityBO);
}
}
/**
* 获取用户请求头的租户ID
*
* @return 租户ID
*/
public static Long getTenantId() {
RequestHeader.UserHeader entityBO = getUserHeader();
Long tenantId = entityBO.getTenantId();
if (Objects.isNull(tenantId)) {
throw new UnAuthorizedException("Unable to get tenant id of user header");
}
return tenantId;
}
/**
* 获取用户请求头的用户ID
*
* @return 用户ID
*/
public static Long getUserId() {
RequestHeader.UserHeader entityBO = getUserHeader();
Long userId = entityBO.getUserId();
if (Objects.isNull(userId)) {
throw new UnAuthorizedException("Unable to get user id of user header");
}
return userId;
}
/**
* 获取用户请求头的用户昵称
*
* @return 用户昵称
*/
public static String getNickName() {
RequestHeader.UserHeader entityBO = getUserHeader();
String nickName = entityBO.getNickName();
if (Objects.isNull(nickName)) {
throw new UnAuthorizedException("Unable to get nick name of user header");
}
return nickName;
}
/**
* 获取用户请求头的用户名称
*
* @return 用户名称
*/
public static String getUserName() {
RequestHeader.UserHeader entityBO = getUserHeader();
String userName = entityBO.getUserName();
if (Objects.isNull(userName)) {
throw new UnAuthorizedException("Unable to get user name of user header");
}
return userName;
}
/**
* 清空用户请求头信息
*/
public static void removeUserHeader() {
USER_HEADER_THREAD_LOCAL.remove();
}
}
@@ -16,7 +16,9 @@
package io.github.pnoker.common.base;
import io.github.pnoker.common.entity.common.RequestHeader;
import io.github.pnoker.common.utils.UserHeaderUtil;
import reactor.core.publisher.Mono;
/**
* 基础 Controller 类接口
@@ -29,30 +31,12 @@ public interface BaseController {
// 默认方法
/**
* 获取用户ID
* 获取租户ID
*
* @return User ID
* @return 租户ID
*/
default Long getUserId() {
return UserHeaderUtil.getUserHeader().getUserId();
}
/**
* 获取用户昵称
*
* @return Nick Name
*/
default String getNickName() {
return UserHeaderUtil.getUserHeader().getNickName();
}
/**
* 获取用户名
*
* @return User Name
*/
default String getUserName() {
return UserHeaderUtil.getUserHeader().getUserName();
default Mono<RequestHeader.UserHeader> getUserHeader() {
return UserHeaderUtil.getUserHeader();
}
/**
@@ -60,7 +44,43 @@ public interface BaseController {
*
* @return 租户ID
*/
default Long getTenantId() {
return UserHeaderUtil.getUserHeader().getTenantId();
default Mono<Long> getTenantId() {
return UserHeaderUtil.getTenantId();
}
/**
* 获取用户ID
*
* @return User ID
*/
default Mono<Long> getUserId() {
return UserHeaderUtil.getUserId();
}
/**
* 获取用户昵称
*
* @return Nick Name
*/
default Mono<String> getNickName() {
return UserHeaderUtil.getNickName();
}
/**
* 获取用户名
*
* @return User Name
*/
default Mono<String> getUserName() {
return UserHeaderUtil.getUserName();
}
/**
* 获取租户ID
*
* @return 租户ID
*/
default Long getTenantId2() {
return 1L;
}
}
@@ -19,10 +19,8 @@ package io.github.pnoker.common.config;
import cn.hutool.core.text.CharSequenceUtil;
import io.github.pnoker.common.constant.common.RequestConstant;
import io.github.pnoker.common.entity.common.RequestHeader;
import io.github.pnoker.common.utils.DecodeUtil;
import io.github.pnoker.common.utils.JsonUtil;
import io.github.pnoker.common.utils.RequestUtil;
import io.github.pnoker.common.utils.UserHeaderUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.web.ServerProperties;
@@ -30,8 +28,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.server.WebFilter;
import reactor.core.publisher.Mono;
import java.util.Objects;
import java.util.Optional;
/**
@@ -76,17 +74,25 @@ public class WebFilterConfig {
public WebFilter interceptor() {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
String authUser = RequestUtil.getRequestHeader(request, RequestConstant.Header.X_AUTH_USER);
if (CharSequenceUtil.isNotEmpty(authUser)) {
byte[] decode = DecodeUtil.deHexCode(authUser);
String user = RequestUtil.getRequestHeader(request, RequestConstant.Header.X_AUTH_USER);
if (CharSequenceUtil.isNotEmpty(user)) {
try {
RequestHeader.UserHeader userHeader = JsonUtil.parseObject(decode, RequestHeader.UserHeader.class);
UserHeaderUtil.setUserHeader(userHeader);
RequestHeader.UserHeader userHeader = JsonUtil.parseObject(user, RequestHeader.UserHeader.class);
if (Objects.isNull(userHeader) || Objects.isNull(userHeader.getTenantId()) || Objects.isNull(userHeader.getUserId())) {
log.warn("Invalid user header: {}", userHeader);
return chain.filter(exchange).contextWrite(context -> context.delete(RequestConstant.Key.USER_HEADER));
} else {
log.debug("User header: {}", userHeader);
return chain.filter(exchange).contextWrite(context -> context.put(RequestConstant.Key.USER_HEADER, userHeader));
}
} catch (Exception e) {
log.error(e.getMessage(), e);
log.error("Error parsing user header", e);
}
}
return chain.filter(exchange).then(Mono.fromRunnable(UserHeaderUtil::removeUserHeader));
return chain.filter(exchange);
};
}
}
@@ -0,0 +1,117 @@
/*
* Copyright 2016-present the IoT DC3 original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.pnoker.common.utils;
import cn.hutool.core.text.CharSequenceUtil;
import io.github.pnoker.common.constant.common.ExceptionConstant;
import io.github.pnoker.common.constant.common.RequestConstant;
import io.github.pnoker.common.entity.common.RequestHeader;
import io.github.pnoker.common.exception.UnAuthorizedException;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
import java.util.Objects;
/**
* 用户请求头 相关工具类
*
* @author pnoker
* @since 2022.1.0
*/
@Slf4j
public class UserHeaderUtil {
private UserHeaderUtil() {
throw new IllegalStateException(ExceptionConstant.UTILITY_CLASS);
}
/**
* 获取用户请求头信息
*
* @return 用户信息
*/
public static Mono<RequestHeader.UserHeader> getUserHeader() {
return Mono.deferContextual(context -> {
if (!context.hasKey(RequestConstant.Key.USER_HEADER)) {
return Mono.error(new UnAuthorizedException("Unable to get user header"));
}
RequestHeader.UserHeader userHeader = context.get(RequestConstant.Key.USER_HEADER);
return Mono.just(userHeader);
});
}
/**
* 获取用户请求头的租户ID
*
* @return 租户ID
*/
public static Mono<Long> getTenantId() {
return getUserHeader().flatMap(userHeader -> {
Long tenantId = userHeader.getTenantId();
if (Objects.isNull(tenantId)) {
return Mono.error(new UnAuthorizedException("Unable to get tenant id of user header"));
}
return Mono.just(tenantId);
});
}
/**
* 获取用户请求头的用户ID
*
* @return 用户ID
*/
public static Mono<Long> getUserId() {
return getUserHeader().flatMap(userHeader -> {
Long userId = userHeader.getUserId();
if (Objects.isNull(userId)) {
return Mono.error(new UnAuthorizedException("Unable to get user id of user header"));
}
return Mono.just(userId);
});
}
/**
* 获取用户请求头的用户昵称
*
* @return 用户昵称
*/
public static Mono<String> getNickName() {
return getUserHeader().flatMap(userHeader -> {
String nickName = userHeader.getNickName();
if (CharSequenceUtil.isEmpty(nickName)) {
return Mono.error(new UnAuthorizedException("Unable to get nick name of user header"));
}
return Mono.just(nickName);
});
}
/**
* 获取用户请求头的用户名称
*
* @return 用户名称
*/
public static Mono<String> getUserName() {
return getUserHeader().flatMap(userHeader -> {
String userName = userHeader.getUserName();
if (CharSequenceUtil.isEmpty(userName)) {
return Mono.error(new UnAuthorizedException("Unable to get user name of user header"));
}
return Mono.just(userName);
});
}
}