|
|
@@ -5,6 +5,7 @@ import cc.uncarbon.framework.core.context.TenantContextHolder;
|
|
|
import cc.uncarbon.framework.core.context.UserContext;
|
|
|
import cc.uncarbon.framework.core.context.UserContextHolder;
|
|
|
import cc.uncarbon.framework.satoken.util.IPUtil;
|
|
|
+import cn.dev33.satoken.session.SaSession;
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
@@ -14,7 +15,7 @@ import org.springframework.web.servlet.AsyncHandlerInterceptor;
|
|
|
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
|
|
|
|
|
|
/**
|
|
|
- * 从请求头解析用户信息,并赋值到上下文
|
|
|
+ * 从请求头解析用户信息,并赋值到上下文;默认用于C端用户的鉴权
|
|
|
*
|
|
|
* @author Uncarbon
|
|
|
*/
|
|
|
@@ -30,23 +31,32 @@ public class DefaultSaTokenParseInterceptor implements AsyncHandlerInterceptor {
|
|
|
|
|
|
// SA-Token 会自动从请求头中解析 token,所以这里可以直接拿到对应 session,从而取出业务字段
|
|
|
if (StpUtil.isLogin()) {
|
|
|
- UserContext userContext = (UserContext) StpUtil.getSession().get(UserContext.CAMEL_NAME);
|
|
|
-
|
|
|
- // 获取用户公网IP
|
|
|
- userContext.setClientIP(IPUtil.getClientIPAddress(request));
|
|
|
- UserContextHolder.setUserContext(userContext);
|
|
|
-
|
|
|
- log.debug("[SA-Token] 从请求头解析出用户上下文 >> {}", userContext);
|
|
|
-
|
|
|
- // 赋值租户上下文
|
|
|
- TenantContext tenantContext = (TenantContext) StpUtil.getSession().get(TenantContext.CAMEL_NAME);
|
|
|
- TenantContextHolder.setTenantContext(tenantContext);
|
|
|
-
|
|
|
+ setContextsFromSaSession(StpUtil.getSession(), request);
|
|
|
+ log.debug("[SA-Token] 从请求头解析出用户上下文 >> {}", UserContextHolder.getUserContext());
|
|
|
} else {
|
|
|
- UserContextHolder.setUserContext(null);
|
|
|
- TenantContextHolder.setTenantContext(null);
|
|
|
+ UserContextHolder.clear();
|
|
|
+ TenantContextHolder.clear();
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自 SaSession 更新当前线程用户、租户上下文
|
|
|
+ *
|
|
|
+ * @param session 会话对象
|
|
|
+ * @param request ServletRequest 对象
|
|
|
+ */
|
|
|
+ public static void setContextsFromSaSession(SaSession session, HttpServletRequest request) {
|
|
|
+ // 赋值用户上下文
|
|
|
+ UserContext userContext = (UserContext) session.get(UserContext.CAMEL_NAME);
|
|
|
+
|
|
|
+ // 获取用户公网IP
|
|
|
+ userContext.setClientIP(IPUtil.getClientIPAddress(request));
|
|
|
+ UserContextHolder.setUserContext(userContext);
|
|
|
+
|
|
|
+ // 赋值租户上下文
|
|
|
+ TenantContext tenantContext = (TenantContext) session.get(TenantContext.CAMEL_NAME);
|
|
|
+ TenantContextHolder.setTenantContext(tenantContext);
|
|
|
+ }
|
|
|
}
|