@@ -6,6 +6,7 @@ import com.yunhai.workweekplan.model.UserSysRole;
|
|||||||
import com.yunhai.workweekplan.utils.IpUtils;
|
import com.yunhai.workweekplan.utils.IpUtils;
|
||||||
import com.yunhai.workweekplan.utils.UserContext;
|
import com.yunhai.workweekplan.utils.UserContext;
|
||||||
import com.yunhai.platform.auth.BoaUserContext;
|
import com.yunhai.platform.auth.BoaUserContext;
|
||||||
|
import com.yunhai.platform.utils.model.BoaRoleInfo;
|
||||||
import com.yunhai.platform.utils.model.BoaUser;
|
import com.yunhai.platform.utils.model.BoaUser;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Around;
|
||||||
@@ -27,7 +28,7 @@ import java.util.List;
|
|||||||
* 当前用户上下文填充切面(移植自 UserclassService ControllerUserContextAspect)。
|
* 当前用户上下文填充切面(移植自 UserclassService ControllerUserContextAspect)。
|
||||||
* <p>@Order(1) 先于审计日志切面(Order 3)执行,保证日志能取到 UserContext。
|
* <p>@Order(1) 先于审计日志切面(Order 3)执行,保证日志能取到 UserContext。
|
||||||
* 取用户优先级:方法参数 BoaUser → BoaUserContext 静态持有者 → request attribute;
|
* 取用户优先级:方法参数 BoaUser → BoaUserContext 静态持有者 → request attribute;
|
||||||
* 角色切换信息从 currentrole(Header/Query,URL 编码 JSON)解析。</p>
|
* 角色:BoaUser.currentRole(服务端会话,权威)优先,currentrole(Header/Query,URL 编码 JSON)兜底。</p>
|
||||||
*/
|
*/
|
||||||
@Aspect
|
@Aspect
|
||||||
@Component
|
@Component
|
||||||
@@ -74,7 +75,7 @@ public class ControllerUserContextAspect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
populateUserContext(boaUser, userSysRole);
|
populateUserContext(boaUser, resolveRole(boaUser, userSysRole));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return joinPoint.proceed();
|
return joinPoint.proceed();
|
||||||
@@ -84,6 +85,24 @@ public class ControllerUserContextAspect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色/学校上下文:服务端会话角色(BoaUser.currentRole,用户中心权威数据)优先,
|
||||||
|
* currentrole 头仅兜底——前端会透传 localStorage 里的 currentRole,切换身份后可能过期
|
||||||
|
* (实测出现过头里 roleId=1 教师、会话里 roleId=7 管理员的情况)。
|
||||||
|
*/
|
||||||
|
private UserSysRole resolveRole(BoaUser boaUser, UserSysRole headerRole) {
|
||||||
|
BoaRoleInfo sessionRole = boaUser == null ? null : boaUser.getCurrentRole();
|
||||||
|
if (sessionRole == null || sessionRole.getRoleId() == null) {
|
||||||
|
return headerRole;
|
||||||
|
}
|
||||||
|
UserSysRole merged = new UserSysRole();
|
||||||
|
merged.setRoleId(sessionRole.getRoleId());
|
||||||
|
merged.setChildId(sessionRole.getChildId());
|
||||||
|
merged.setSchId(sessionRole.getSchId());
|
||||||
|
merged.setUserId(boaUser.getId());
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
||||||
/** 从 currentrole(URL 编码,Header 或 Query 参数)解析 UserSysRole */
|
/** 从 currentrole(URL 编码,Header 或 Query 参数)解析 UserSysRole */
|
||||||
private UserSysRole resolveUserSysRoleFromRequest(HttpServletRequest request) {
|
private UserSysRole resolveUserSysRoleFromRequest(HttpServletRequest request) {
|
||||||
String raw = request.getHeader("currentrole");
|
String raw = request.getHeader("currentrole");
|
||||||
|
|||||||
Reference in New Issue
Block a user