|
@@ -2,33 +2,53 @@ package com.hfln.portal.infrastructure.config;
|
|
|
|
|
|
import cn.dev33.satoken.session.SaSession;
|
|
import cn.dev33.satoken.session.SaSession;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
|
+import cn.hfln.framework.extension.BizException;
|
|
import com.hfln.portal.common.constant.UserConstants;
|
|
import com.hfln.portal.common.constant.UserConstants;
|
|
|
|
+import com.hfln.portal.domain.exception.ErrorEnum;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
+@Slf4j
|
|
@Component
|
|
@Component
|
|
public class UserContextInterceptor implements HandlerInterceptor {
|
|
public class UserContextInterceptor implements HandlerInterceptor {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
|
- // 从Session中获取租户ID并设置到ThreadLocal中
|
|
|
|
- LoginUser loginUser = new LoginUser();
|
|
|
|
- SaSession saSession = StpUtil.getSession();
|
|
|
|
- loginUser.setTenantId((Long) saSession.get(UserConstants.SA_USER_TENANT_ID));
|
|
|
|
- loginUser.setTenantName((String) saSession.get(UserConstants.SA_USER_TENANT_NAME));
|
|
|
|
- loginUser.setTenantCode((String) saSession.get(UserConstants.SA_USER_TENANT_CODE));
|
|
|
|
- loginUser.setUserId((Long) saSession.get(UserConstants.SA_USER_ID));
|
|
|
|
- loginUser.setUserName((String) saSession.get(UserConstants.SA_USER_NAME));
|
|
|
|
- loginUser.setUserType((String) saSession.get(UserConstants.SA_USER_TYPE));
|
|
|
|
- loginUser.setAccount((String) saSession.get(UserConstants.SA_USER_ACCOUNT));
|
|
|
|
- loginUser.setPhone((String) saSession.get(UserConstants.SA_USER_PHONE));
|
|
|
|
- loginUser.setOpenId((String) saSession.get(UserConstants.SA_USER_OPEN_ID));
|
|
|
|
- loginUser.setUnionId((String) saSession.get(UserConstants.SA_USER_UNION_ID));
|
|
|
|
- loginUser.setRoleId((Long) saSession.get(UserConstants.SA_USER_ROLE_ID));
|
|
|
|
- UserContext.set(loginUser);
|
|
|
|
|
|
+
|
|
|
|
+ // 检查用户是否登录
|
|
|
|
+ if (!StpUtil.isLogin()) {
|
|
|
|
+ log.error("用户未登录,跳过UserContext设置");
|
|
|
|
+ throw new BizException(ErrorEnum.USER_NOT_LOGIN.getErrorCode(), ErrorEnum.USER_NOT_LOGIN.getErrorMessage());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+
|
|
|
|
+ // 从Session中获取租户ID并设置到ThreadLocal中
|
|
|
|
+ LoginUser loginUser = new LoginUser();
|
|
|
|
+ SaSession saSession = StpUtil.getSession();
|
|
|
|
+ loginUser.setTenantId((Long) saSession.get(UserConstants.SA_USER_TENANT_ID));
|
|
|
|
+ loginUser.setTenantName((String) saSession.get(UserConstants.SA_USER_TENANT_NAME));
|
|
|
|
+ loginUser.setTenantCode((String) saSession.get(UserConstants.SA_USER_TENANT_CODE));
|
|
|
|
+ loginUser.setUserId((Long) saSession.get(UserConstants.SA_USER_ID));
|
|
|
|
+ loginUser.setUserName((String) saSession.get(UserConstants.SA_USER_NAME));
|
|
|
|
+ loginUser.setUserType((String) saSession.get(UserConstants.SA_USER_TYPE));
|
|
|
|
+ loginUser.setAccount((String) saSession.get(UserConstants.SA_USER_ACCOUNT));
|
|
|
|
+ loginUser.setPhone((String) saSession.get(UserConstants.SA_USER_PHONE));
|
|
|
|
+ loginUser.setOpenId((String) saSession.get(UserConstants.SA_USER_OPEN_ID));
|
|
|
|
+ loginUser.setUnionId((String) saSession.get(UserConstants.SA_USER_UNION_ID));
|
|
|
|
+ loginUser.setRoleId((Long) saSession.get(UserConstants.SA_USER_ROLE_ID));
|
|
|
|
+ UserContext.set(loginUser);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("设置用户上下文信息异常", e);
|
|
|
|
+ // 即使出现异常也继续执行请求
|
|
|
|
+ UserContext.clear();
|
|
|
|
+ throw new BizException(ErrorEnum.USER_INFO_ERROR.getErrorCode(), ErrorEnum.USER_INFO_ERROR.getErrorMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|