Skip to content

Commit 887f1b6

Browse files
authored
fix: modify tenant API (opentiny#280)
* fix: modify resource upload * fix: modify resource upload * fix: modify resource upload * fix: modify resource upload * fix: modify app API * fix: modify app API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API * fix: modify tenant API
1 parent 91ebd34 commit 887f1b6

File tree

17 files changed

+106
-62
lines changed

17 files changed

+106
-62
lines changed

base/src/main/java/com/tinyengine/it/common/exception/ExceptionEnum.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,10 +312,16 @@ public enum ExceptionEnum implements IBaseError {
312312
* Cm 337 exception enum.
313313
*/
314314
CM337("CM337", "组织不存在"),
315+
315316
/**
316317
* Cm 338 exception enum.
317318
*/
318-
CM338("CM338", "用户不存在,请重新注册");
319+
CM338("CM338", "用户不存在,请重新注册"),
320+
321+
/**
322+
* Cm 339 exception enum.
323+
*/
324+
CM339("CM339", "token检验失败,请重新登录");
319325

320326
/**
321327
* 错误码

base/src/main/java/com/tinyengine/it/login/config/SSOInterceptor.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
package com.tinyengine.it.login.config;
1414

15+
import com.tinyengine.it.common.exception.ExceptionEnum;
16+
import com.tinyengine.it.common.exception.ServiceException;
1517
import com.tinyengine.it.login.utils.JwtUtil;
1618
import com.tinyengine.it.login.config.context.DefaultLoginUserContext;
1719
import com.tinyengine.it.login.model.UserInfo;
@@ -35,18 +37,15 @@ public class SSOInterceptor implements HandlerInterceptor {
3537
@Autowired
3638
private JwtUtil jwtUtil;
3739

38-
private static final String SSO_SERVER = System.getenv("SSO_SERVER");
39-
4040
@Override
4141
public boolean preHandle(HttpServletRequest request,
4242
HttpServletResponse response, Object handler) throws Exception {
4343

4444
String authorization = request.getHeader("Authorization");
4545
// 如果没有token,重定向到登录页
4646
if (authorization == null || authorization.isEmpty()) {
47-
log.info("No token, redirecting to: {}", SSO_SERVER);
48-
response.sendRedirect(SSO_SERVER);
49-
return false;
47+
log.info("No token");
48+
throw new ServiceException(ExceptionEnum.CM336.getResultCode(), ExceptionEnum.CM336.getResultMsg());
5049
}
5150
String token = jwtUtil.getTokenFromRequest(authorization);
5251
String requestURI = request.getRequestURI();
@@ -57,8 +56,7 @@ public boolean preHandle(HttpServletRequest request,
5756
// 验证token
5857
if (!jwtUtil.validateToken(token)) {
5958
log.warn("Token validation failed");
60-
response.sendRedirect(SSO_SERVER);
61-
return false;
59+
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg());
6260
}
6361

6462
// 从token中获取用户信息
@@ -72,8 +70,7 @@ public boolean preHandle(HttpServletRequest request,
7270
// 检查必需的用户信息
7371
if (username == null || username.isEmpty() || userId == null) {
7472
log.warn("User information is incomplete - username: {}, userId: {}", username, userId);
75-
response.sendRedirect(SSO_SERVER);
76-
return false;
73+
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg());
7774
}
7875

7976
// 存储用户信息到LoginUserContext
@@ -90,9 +87,8 @@ public boolean preHandle(HttpServletRequest request,
9087

9188
} catch (Exception e) {
9289
log.error("Token validation exception: {}", e.getMessage(), e);
93-
response.sendRedirect(SSO_SERVER);
9490
DefaultLoginUserContext.clear();
95-
return false;
91+
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg());
9692
}
9793
}
9894

base/src/main/java/com/tinyengine/it/login/config/context/DefaultLoginUserContext.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ public String getTenantId() {
3030
if (tenantList == null || tenantList.isEmpty()) {
3131
return DEFAULT_TENANT;
3232
}
33+
for (Tenant tenant : tenantList) {
34+
if (tenant.getIsInUse()) {
35+
return tenant.getId();
36+
}
37+
}
3338

34-
return tenantList.get(0).getId();
39+
return DEFAULT_TENANT;
3540
}
3641

3742
@Override

base/src/main/java/com/tinyengine/it/login/controller/LoginController.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,18 +239,29 @@ public Result<ValidationResult> validateToken(@RequestParam String token) {
239239
@GetMapping("/user/tenant")
240240
public Result<SSOTicket> setTenant(@RequestParam Integer tenantId) {
241241
List<Tenant> tenants = loginUserContext.getTenants();
242+
if (tenantId == null) {
243+
return Result.failed(ExceptionEnum.CM320);
244+
}
242245
if (tenants == null || tenants.isEmpty()) {
243246
return Result.failed(ExceptionEnum.CM337);
244247
}
245-
List<Tenant> currentTenant = new ArrayList<>();
248+
List<Tenant> tenantList = new ArrayList<>();
249+
boolean found = false;
246250
for (Tenant tenant : tenants) {
247251
if (tenant.getId().equals(tenantId.toString())) {
248-
currentTenant.add(tenant);
252+
tenant.setIsInUse(true);
253+
found = true;
254+
} else {
255+
tenant.setIsInUse(false);
249256
}
257+
258+
tenantList.add(tenant);
250259
}
251-
if (currentTenant.isEmpty()) {
260+
261+
if (!found) {
252262
return Result.failed(ExceptionEnum.CM337);
253263
}
264+
254265
// 通过 RequestContextHolder 获取请求
255266
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
256267
.getRequest();
@@ -259,7 +270,7 @@ public Result<SSOTicket> setTenant(@RequestParam Integer tenantId) {
259270
if (headerToken == null || headerToken.isEmpty()) {
260271
return Result.failed(ExceptionEnum.CM336);
261272
}
262-
String token = jwtUtil.generateTokenWithSelectedTenant(headerToken, currentTenant);
273+
String token = jwtUtil.generateTokenWithSelectedTenant(headerToken, tenantList);
263274
// 将原 token 加入黑名单
264275
Claims claims = Jwts.parser()
265276
.verifyWith(JwtUtil.getSecretKey())

base/src/main/java/com/tinyengine/it/mapper/AuthUsersUnitsRolesMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.tinyengine.it.mapper;
22

3+
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
34
import com.tinyengine.it.model.entity.AuthUsersUnitsRoles;
45
import com.tinyengine.it.model.entity.Tenant;
56
import org.apache.ibatis.annotations.Param;
67
import org.apache.ibatis.annotations.Select;
78

89
import java.util.List;
910

10-
public interface AuthUsersUnitsRolesMapper {
11+
public interface AuthUsersUnitsRolesMapper extends BaseMapper<AuthUsersUnitsRoles> {
1112
/**
1213
* 查询表r_auth_users_units_roles所有信息
1314
*

base/src/main/java/com/tinyengine/it/model/entity/Tenant.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class Tenant {
4242
@TableId(value = "id", type = IdType.AUTO)
4343
private String id;
4444

45-
@Schema(name = "nameCn", description = "组织唯一代码")
45+
@Schema(name = "orgCode", description = "组织唯一代码")
4646
private String orgCode;
4747

4848
@Schema(name = "nameCn", description = "组织中文名")
@@ -54,6 +54,10 @@ public class Tenant {
5454
@Schema(name = "description", description = "组织描述")
5555
private String description;
5656

57+
@TableField(exist = false)
58+
@Schema(name = "isInUse", description = "是否当前所在组织")
59+
private Boolean isInUse;
60+
5761
@TableField(fill = FieldFill.INSERT)
5862
@Schema(name = "createdTime", description = "创建时间")
5963
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

base/src/main/java/com/tinyengine/it/service/platform/impl/TenantServiceImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212

1313
package com.tinyengine.it.service.platform.impl;
1414

15+
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
1516
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
1617
import com.tinyengine.it.common.context.LoginUserContext;
18+
import com.tinyengine.it.common.exception.ExceptionEnum;
19+
import com.tinyengine.it.common.exception.ServiceException;
1720
import com.tinyengine.it.mapper.TenantMapper;
1821
import com.tinyengine.it.mapper.AuthUsersUnitsRolesMapper;
1922
import com.tinyengine.it.model.entity.AuthUsersUnitsRoles;
@@ -110,6 +113,12 @@ public Integer updateTenantById(Tenant tenant) {
110113
*/
111114
@Override
112115
public Integer createTenant(Tenant tenant) {
116+
QueryWrapper<Tenant> queryWrapper = new QueryWrapper<>();
117+
queryWrapper.eq("name_cn", tenant.getNameCn());
118+
Tenant tenantResult = this.baseMapper.selectOne(queryWrapper);
119+
if (tenantResult != null) {
120+
throw new ServiceException(ExceptionEnum.CM003.getResultCode(), ExceptionEnum.CM003.getResultMsg());
121+
}
113122
int result = baseMapper.createTenant(tenant);
114123
if (result == 1) {
115124
AuthUsersUnitsRoles authUsersUnitsRoles = new AuthUsersUnitsRoles();

base/src/test/java/com/tinyengine/it/common/handler/MockUserContext.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@
2323
* @since 2025-04-14
2424
*/
2525
public class MockUserContext implements LoginUserContext {
26+
/**
27+
* 返回当前用户所在的业务租户id
28+
*
29+
* @return 租户Id
30+
*/
31+
@Override
32+
public String getTenantId() {
33+
return "1";
34+
}
35+
2636
/**
2737
* 返回当前用户所诉的业务租户信息
2838
*

base/src/test/java/com/tinyengine/it/common/handler/MyMetaObjectHandlerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void testInsertFill() throws NoSuchFieldException, IllegalAccessException {
3636
when(param.hasSetter("tenantId")).thenReturn(true);
3737
TestUtil.setPrivateValue(myMetaObjectHandler, "loginUserContext", new MockUserContext());
3838
myMetaObjectHandler.insertFill(param);
39-
verify(param, times(6)).hasSetter(anyString());
39+
verify(param, times(5)).hasSetter(anyString());
4040
}
4141

4242
@Test

base/src/test/java/com/tinyengine/it/controller/UserControllerTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212

1313
package com.tinyengine.it.controller;
1414

15+
import static org.mockito.ArgumentMatchers.anyInt;
1516
import static org.mockito.ArgumentMatchers.anyString;
1617
import static org.mockito.Mockito.when;
1718

1819
import com.tinyengine.it.common.base.Result;
1920
import com.tinyengine.it.common.context.LoginUserContext;
2021
import com.tinyengine.it.common.handler.MockUserContext;
2122
import com.tinyengine.it.common.utils.TestUtil;
23+
import com.tinyengine.it.mapper.AuthUsersUnitsRolesMapper;
24+
import com.tinyengine.it.model.entity.Tenant;
2225
import com.tinyengine.it.model.entity.User;
2326
import com.tinyengine.it.service.app.UserService;
2427

@@ -29,6 +32,9 @@
2932
import org.mockito.Mock;
3033
import org.mockito.MockitoAnnotations;
3134

35+
import java.util.ArrayList;
36+
import java.util.List;
37+
3238
/**
3339
* test case
3440
*
@@ -42,7 +48,7 @@ class UserControllerTest {
4248
private UserController userController;
4349

4450
@Mock
45-
private LoginUserContext loginUserContext = new MockUserContext();
51+
private AuthUsersUnitsRolesMapper authUsersUnitsRolesMapper;
4652

4753
@BeforeEach
4854
void setUp() throws NoSuchFieldException, IllegalAccessException {
@@ -53,7 +59,11 @@ void setUp() throws NoSuchFieldException, IllegalAccessException {
5359
void testMe() throws NoSuchFieldException, IllegalAccessException {
5460
TestUtil.setPrivateValue(userController, "loginUserContext", new MockUserContext());
5561
User mockData = new User();
62+
Tenant tenant = new Tenant();
63+
List<Tenant> tenants = new ArrayList<>();
64+
tenants.add(tenant);
5665
when(userService.queryUserById(anyString())).thenReturn(mockData);
66+
when(authUsersUnitsRolesMapper.queryAllTenantByUserId(anyInt())).thenReturn(tenants);
5767
Result<User> result = userController.me();
5868
Assertions.assertEquals(mockData, result.getData());
5969
}

0 commit comments

Comments
 (0)