bug修改
This commit is contained in:
1 parent
1ee17464a9
commit
928cb4a26a
1 file changed
+74
+74
@@ -0,0 +1,74 @@
|
||||
package cn.iocoder.yudao.module.member.framework.web.core;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||
import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.AUTH_LOGIN_USER_DISABLED;
|
||||
|
||||
/**
|
||||
* App 端已登录请求统一校验会员是否禁用。
|
||||
* <p>
|
||||
* 与 {@code GET /member/user/get} 行为一致:禁用则清 token 并返回
|
||||
* {@link cn.iocoder.yudao.module.member.enums.MemberErrorCode#AUTH_LOGIN_USER_DISABLED},
|
||||
* 供 Flutter ApiClient 全局踢登录。
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class MemberUserDisableInterceptor implements HandlerInterceptor {
|
||||
|
||||
private final WebProperties webProperties;
|
||||
private final MemberUserService memberUserService;
|
||||
private final OAuth2TokenApi oauth2TokenApi;
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
String uri = request.getRequestURI();
|
||||
String contextPath = request.getContextPath();
|
||||
String path = contextPath == null || contextPath.isEmpty()
|
||||
? uri
|
||||
: uri.substring(contextPath.length());
|
||||
// 仅 App API
|
||||
if (!path.startsWith(webProperties.getAppApi().getPrefix())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getId() == null) {
|
||||
return true;
|
||||
}
|
||||
// 仅会员
|
||||
if (!UserTypeEnum.MEMBER.getValue().equals(loginUser.getUserType())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
MemberUserDO user = memberUserService.getUser(loginUser.getId());
|
||||
if (user == null || CommonStatusEnum.isDisable(user.getStatus())) {
|
||||
if (user != null) {
|
||||
try {
|
||||
oauth2TokenApi.removeAccessTokenByUserId(
|
||||
user.getId(), UserTypeEnum.MEMBER.getValue());
|
||||
} catch (Exception e) {
|
||||
log.warn("禁用用户请求时清 token 失败, userId={}", user.getId(), e);
|
||||
}
|
||||
}
|
||||
throw exception(AUTH_LOGIN_USER_DISABLED);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user