修复失效头像地址返回问题

This commit is contained in:
2026-07-25 22:32:43 +08:00
parent c42f4b3179
commit df6d3a7220

View File

@@ -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<String> 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("");
}
}
/**
* 获取路由信息
*