diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index ea9e425..0784cd4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -1,5 +1,9 @@ package com.ruoyi.web.controller.system; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.Set; @@ -7,6 +11,7 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cms.domain.IDCardInfo; import com.ruoyi.cms.service.impl.AppUserServiceImpl; import com.ruoyi.cms.util.StringUtil; +import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwTokenResult; import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwUserLogin; @@ -166,6 +171,7 @@ public class SysLoginController public AjaxResult getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); + normalizeMissingLocalAvatar(user); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 @@ -189,6 +195,41 @@ public class SysLoginController return ajax; } + /** + * 本地头像文件被清理后,不能把已失效的静态地址继续交给浏览器。 + * 外部 HTTPS 头像不在本方法处理范围内,避免改变第三方资源语义。 + */ + private void normalizeMissingLocalAvatar(SysUser user) + { + if (user == null || StringUtils.isEmpty(user.getAvatar()) + || !user.getAvatar().startsWith(Constants.RESOURCE_PREFIX + "/")) + { + return; + } + + String profile = RuoYiConfig.getProfile(); + if (StringUtils.isEmpty(profile)) + { + return; + } + + try + { + Path profileRoot = Paths.get(profile).toAbsolutePath().normalize(); + Path relativeAvatar = Paths.get(user.getAvatar() + .substring(Constants.RESOURCE_PREFIX.length() + 1)).normalize(); + Path avatarFile = profileRoot.resolve(relativeAvatar).normalize(); + if (!avatarFile.startsWith(profileRoot) || !Files.isRegularFile(avatarFile)) + { + user.setAvatar(""); + } + } + catch (InvalidPathException | SecurityException exception) + { + user.setAvatar(""); + } + } + /** * 获取路由信息 *