Skip to content

Commit 2f00e73

Browse files
committed
fix:user tenant api
1 parent 198e21b commit 2f00e73

File tree

5 files changed

+46
-43
lines changed

5 files changed

+46
-43
lines changed

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

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
import com.tinyengine.it.login.utils.JwtUtil;
1818
import com.tinyengine.it.login.config.context.DefaultLoginUserContext;
1919
import com.tinyengine.it.login.model.UserInfo;
20+
import com.tinyengine.it.mapper.AuthUsersUnitsRolesMapper;
2021
import com.tinyengine.it.model.entity.Tenant;
21-
import com.tinyengine.it.model.entity.User;
22-
import com.tinyengine.it.service.app.UserService;
2322
import jakarta.servlet.http.HttpServletRequest;
2423
import jakarta.servlet.http.HttpServletResponse;
2524
import lombok.extern.slf4j.Slf4j;
@@ -39,13 +38,13 @@ public class SSOInterceptor implements HandlerInterceptor {
3938
@Autowired
4039
private JwtUtil jwtUtil;
4140
@Autowired
42-
private UserService userService;
43-
41+
AuthUsersUnitsRolesMapper authUsersUnitsRolesMapper;
4442
@Override
4543
public boolean preHandle(HttpServletRequest request,
4644
HttpServletResponse response, Object handler) throws Exception {
4745

4846
String authorization = request.getHeader("Authorization");
47+
String org = request.getHeader("X-Lowcode-Org");
4948
// 如果没有token,重定向到登录页
5049
if (authorization == null || authorization.isEmpty()) {
5150
log.info("No token");
@@ -66,7 +65,6 @@ public boolean preHandle(HttpServletRequest request,
6665
// 从token中获取用户信息
6766
String username = jwtUtil.getUsernameFromToken(token);
6867
String userId = jwtUtil.getUserIdFromToken(token);
69-
List<Tenant> tenants = jwtUtil.getTenantIdFromToken(token);
7068
String roles = jwtUtil.getRolesFromToken(token);
7169
Integer platformId = jwtUtil.getPlatformIdFromToken(token);
7270

@@ -76,16 +74,30 @@ public boolean preHandle(HttpServletRequest request,
7674
log.warn("User information is incomplete - username: {}, userId: {}", username, userId);
7775
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg());
7876
}
79-
User user = userService.queryUserById(userId);// 确认用户存在
80-
if (user == null) {
81-
log.warn("User not found for userId: {}", userId);
82-
throw new ServiceException(ExceptionEnum.CM338.getResultCode(), ExceptionEnum.CM339.getResultMsg());
83-
}
84-
Integer useTenantId = user.getUseTenantId();
85-
for (Tenant tenant : tenants) {
86-
tenant.setIsInUse(tenant.getId().equals(useTenantId.toString()));
77+
List<Tenant> tenants= authUsersUnitsRolesMapper.queryAllTenantByUserId(Integer.valueOf(userId));
78+
if(!requestURI.equals("/platform-center/api/user/me")){
79+
80+
if(requestURI.contains("user/tenant")){
81+
String queryString = request.getQueryString();
82+
org=queryString.split("=")[1];
83+
}
84+
if(tenants != null&&!org.equals("null")){
85+
boolean findOrg = false;
86+
for (Tenant tenant : tenants) {
87+
tenant.setIsInUse(tenant.getId().equals(org));
88+
if(tenant.getIsInUse()){
89+
findOrg = true;
90+
}
91+
}
92+
if(!findOrg){
93+
log.warn("X-Lowcode-Org not found in user's tenants - X-Lowcode-Org: {}", org);
94+
throw new ServiceException(ExceptionEnum.CM341.getResultCode(), ExceptionEnum.CM341.getResultMsg());
95+
}
96+
}
97+
8798
}
88-
// 存储用户信息到LoginUserContext
99+
100+
// 存储用户信息到LoginUserContext
89101
UserInfo userInfo = new UserInfo(userId, username, tenants);
90102

91103
userInfo.setPlatformId(platformId != null ? platformId : 0);
@@ -100,7 +112,7 @@ public boolean preHandle(HttpServletRequest request,
100112
} catch (Exception e) {
101113
log.error("Token validation exception: {}", e.getMessage(), e);
102114
DefaultLoginUserContext.clear();
103-
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), ExceptionEnum.CM339.getResultMsg());
115+
throw new ServiceException(ExceptionEnum.CM339.getResultCode(), e.getMessage());
104116
}
105117
}
106118

@@ -109,6 +121,7 @@ public void afterCompletion(HttpServletRequest request,
109121
HttpServletResponse response, Object handler, Exception ex) {
110122
// 请求完成后清理用户上下文
111123
DefaultLoginUserContext.clear();
124+
112125
log.debug("Cleared user context for request completion");
113126
}
114127
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class DefaultLoginUserContext implements LoginUserContext {
1919
private static final String DEFAULT_TENANT = "1";
2020

2121

22+
2223
/**
2324
* 返回当前用户所在的业务租户id
2425
*
@@ -32,9 +33,14 @@ public String getTenantId() {
3233
return DEFAULT_TENANT;
3334
}
3435
for (Tenant tenant : tenantList) {
35-
if (tenant.getIsInUse()!=null&&tenant.getIsInUse()) {
36-
return tenant.getId();
36+
if(tenant.getIsInUse()!=null){
37+
if (tenant.getIsInUse()) {
38+
return tenant.getId();
39+
}
40+
}else{
41+
return tenantList.get(0).getId();
3742
}
43+
3844
}
3945
return DEFAULT_TENANT;
4046
}
@@ -69,6 +75,7 @@ public void setTenants(List<Tenant> tenants) {
6975
CURRENT_USER.set(userInfo);
7076
}
7177

78+
7279
/**
7380
* 设置当前用户信息
7481
*/

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

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616
import com.tinyengine.it.common.context.LoginUserContext;
1717
import com.tinyengine.it.common.exception.ExceptionEnum;
1818
import com.tinyengine.it.common.log.SystemControllerLog;
19+
import com.tinyengine.it.login.model.*;
1920
import com.tinyengine.it.login.utils.JwtUtil;
2021
import com.tinyengine.it.login.utils.SM3PasswordUtil;
2122
import com.tinyengine.it.login.config.context.DefaultLoginUserContext;
22-
import com.tinyengine.it.login.model.PasswordResult;
23-
import com.tinyengine.it.login.model.PasswordValidationResult;
24-
import com.tinyengine.it.login.model.SSOTicket;
25-
import com.tinyengine.it.login.model.ValidationResult;
2623
import com.tinyengine.it.login.service.ConfigurablePasswordValidator;
2724
import com.tinyengine.it.login.service.LoginService;
2825
import com.tinyengine.it.login.service.TokenBlacklistService;
@@ -31,9 +28,6 @@
3128
import com.tinyengine.it.model.entity.Tenant;
3229
import com.tinyengine.it.model.entity.User;
3330
import com.tinyengine.it.service.app.UserService;
34-
import com.tinyengine.it.service.platform.TenantService;
35-
import io.jsonwebtoken.Claims;
36-
import io.jsonwebtoken.Jwts;
3731
import io.swagger.v3.oas.annotations.Operation;
3832
import io.swagger.v3.oas.annotations.Parameter;
3933
import io.swagger.v3.oas.annotations.media.Content;
@@ -265,34 +259,22 @@ public Result<SSOTicket> setTenant(@RequestParam Integer tenantId) {
265259
return Result.failed(ExceptionEnum.CM341);
266260
}
267261
//存储当前组织到LoginUserContext
268-
loginUserContext.setTenants(tenantList);
269-
// 更新用户当前使用组织
270-
User user = new User();
271-
user.setId(loginUserContext.getLoginUserId());
272-
user.setUseTenantId(tenantId);
273-
userService.updateUserById(user);
262+
UserInfo currentUser = DefaultLoginUserContext.getCurrentUser();
263+
currentUser.setTenants(tenantList);
264+
DefaultLoginUserContext.setCurrentUser(currentUser);
274265

275266
// 通过 RequestContextHolder 获取请求
276267
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
277268
.getRequest();
278269
String authHeader = request.getHeader("Authorization");
279-
String headerToken = jwtUtil.getTokenFromRequest(authHeader);
270+
String headerToken = jwtUtil.getTokenFromRequest(authHeader);
280271
if (headerToken == null || headerToken.isEmpty()) {
281272
return Result.failed(ExceptionEnum.CM336);
282273
}
283-
String token = jwtUtil.generateTokenWithSelectedTenant(headerToken, tenantList);
284-
// 将原 token 加入黑名单
285-
Claims claims = Jwts.parser()
286-
.verifyWith(JwtUtil.getSecretKey())
287-
.build()
288-
.parseSignedClaims(headerToken)
289-
.getPayload();
290274

291-
long expiryTime = claims.getExpiration().getTime();
292-
tokenBlacklistService.blacklistToken(headerToken, expiryTime);
293275
// 创建SSO票据
294276
SSOTicket ticket = new SSOTicket();
295-
ticket.setToken(token);
277+
ticket.setToken(headerToken);
296278
ticket.setUsername(DefaultLoginUserContext.getCurrentUser().getUsername());
297279
ticket.setExpireTime(System.currentTimeMillis() + 3600000);
298280

base/src/main/java/com/tinyengine/it/login/service/impl/LoginServiceImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ public User createUser(User user) throws Exception {
7070
user.setSalt(cipherText);
7171
user.setPublicKey(publicKeyBase64);
7272
user.setPrivateKey(privateKeyBase64);
73-
user.setUseTenantId(Integer.valueOf(loginUserContext.getTenantId()));
7473
baseMapper.createUser(user);
7574
User result = baseMapper.queryUserById(user.getId());
7675
result.setPrivateKey(null);

base/src/main/java/com/tinyengine/it/service/app/impl/v1/AppV1ServiceImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,9 @@ private List<PackagesDto> getPackages() {
280280
* @return the meta
281281
*/
282282
public MetaDto getMetaDto(Integer id) {
283-
App app = appMapper.queryAppById(id, loginUserContext.getTenantId());
283+
String tenantId = loginUserContext.getTenantId();
284+
log.info("Getting login user tenant id: {}", tenantId);
285+
App app = appMapper.queryAppById(id, tenantId);
284286
if (app == null) {
285287
throw new ServiceException(ExceptionEnum.CM009.getResultCode(), ExceptionEnum.CM009.getResultMsg());
286288
}

0 commit comments

Comments
 (0)