Commit 66970561 by fanjiaxin

联调问题处理

parent cdee69b2
Pipeline #71579 passed with stages
in 1 minute 11 seconds
package com.netease.yanxuan.wx.store.sharer.biz.config;
import com.netease.yanxuan.wx.store.sharer.biz.interceptor.AuthInterceptor;
import com.netease.yanxuan.wx.store.sharer.biz.interceptor.UserInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.Collections;
/**
* @Description 配置
* @Author fanjiaxin
......@@ -15,10 +19,27 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final AuthInterceptor authInterceptor;
private final UserInterceptor userInterceptor;
private static final String[] EXCLUDE_URLS = {"/i/health",
"/sharer/open/**", "/sharer/test/**",
"/sharer/user/login", "/sharer/product/page/list"};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(getExcludePathPatterns());
registry.addInterceptor(userInterceptor)
.addPathPatterns("/**");
}
/**
* 白名单
*/
private ArrayList<String> getExcludePathPatterns() {
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, EXCLUDE_URLS);
return list;
}
}
......@@ -3,8 +3,6 @@ package com.netease.yanxuan.wx.store.sharer.biz.core;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
/**
* @Description 授权上下文
* @Author fanjiaxin
......@@ -29,10 +27,10 @@ public class LoginUserContextHolder {
/**
* 生成用户Token
*/
public static String generateToken(String code) {
public static String generateToken(String code, String openId) {
return Jwts.builder()
.claim("time", new Date().getTime())
.signWith(SignatureAlgorithm.HS256, code)
.claim("code", code)
.signWith(SignatureAlgorithm.HS256, openId)
.compact();
}
}
......@@ -35,7 +35,6 @@ public class LoginUserHelper {
* 保存用户认证信息
*/
public void setLoginUserInfo(String token, LoginUserInfo loginUserInfo) {
LoginUserContextHolder.set(loginUserInfo);
redisClient.setStr(CoreConstant.REDIS_TOKEN_USER_KEY + token,
JSON.toJSONString(loginUserInfo), CoreConstant.REDIS_TOKEN_EXPIRE_SECONDS);
}
......
......@@ -3,20 +3,16 @@ package com.netease.yanxuan.wx.store.sharer.biz.interceptor;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserContextHolder;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserHelper;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserInfo;
import com.netease.yanxuan.wx.store.sharer.common.annotation.LoginRequired;
import com.netease.yanxuan.wx.store.sharer.common.constant.CoreConstant;
import com.netease.yanxuan.wx.store.sharer.common.exception.NoAuthException;
import com.netease.yanxuan.wx.store.sharer.common.handler.RedisClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/**
* @Description 鉴权拦截器
......@@ -27,34 +23,21 @@ import java.lang.reflect.Method;
@RequiredArgsConstructor
@Component
public class AuthInterceptor implements HandlerInterceptor {
private final RedisClient redisClient;
private final LoginUserHelper jwtHelper;
private final LoginUserHelper loginUserHelper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
log.info("AuthInterceptor preHandle execute, url:{}", request.getRequestURI());
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
LoginRequired validateAnnotation = method.getAnnotation(LoginRequired.class);
String token = request.getHeader(CoreConstant.AUTH_HEADER_TOKEN_KEY);
log.info("AuthInterceptor preHandle token:{}", token);
LoginUserInfo loginUserInfo;
if (null != validateAnnotation) {
if (StringUtils.isBlank(token)) {
throw new NoAuthException("用户认证失败,TOKEN为空");
}
loginUserInfo = jwtHelper.getLoginUserInfo(token);
if (null == loginUserInfo) {
log.info("用户登录状态过期,token缓存失效,path:{}", request.getServletPath());
throw new NoAuthException("用户登录状态过期");
}
} else if (StringUtils.isNotBlank(token)) {
loginUserInfo = jwtHelper.getLoginUserInfo(token);
if (null != loginUserInfo) {
// 刷新缓存
jwtHelper.setLoginUserInfo(token, loginUserInfo);
}
if (StringUtils.isBlank(token)) {
throw new NoAuthException("用户认证失败,TOKEN为空");
}
LoginUserInfo loginUserInfo = loginUserHelper.getLoginUserInfo(token);
if (null == loginUserInfo) {
log.info("用户登录状态过期,token缓存失效,path:{}", request.getServletPath());
throw new NoAuthException("用户登录状态过期");
}
return true;
}
......
package com.netease.yanxuan.wx.store.sharer.biz.interceptor;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserContextHolder;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserHelper;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserInfo;
import com.netease.yanxuan.wx.store.sharer.common.constant.CoreConstant;
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;
/**
* @Description 用户信息拦截器
* @Author fanjiaxin
* @Date 2025/3/10 10:20
*/
@Slf4j
@RequiredArgsConstructor
@Component
public class UserInterceptor implements HandlerInterceptor {
private final LoginUserHelper loginUserHelper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
log.info("UserInterceptor preHandle execute, url:{}", request.getRequestURI());
String token = request.getHeader(CoreConstant.AUTH_HEADER_TOKEN_KEY);
log.info("UserInterceptor preHandle token:{}", token);
LoginUserInfo loginUserInfo = loginUserHelper.getLoginUserInfo(token);
if (null != loginUserInfo) {
// 刷新缓存
loginUserHelper.setLoginUserInfo(token, loginUserInfo);
LoginUserContextHolder.set(loginUserInfo);
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) {
LoginUserContextHolder.remove();
}
}
......@@ -43,7 +43,7 @@ public class UserServiceImpl implements IUserService {
private final SharerInfoMapper sharerInfoMapper;
private final DrmSharerConfig drmSharerConfig;
private final LoginUserHelper jwtHelper;
private final LoginUserHelper loginUserHelper;
private final WeChatUserInfoRequest weChatUserRequest;
private final WeChatShopSharerRegisterBindRequest weChatShopSharerRegisterBindRequest;
private final WeChatShopSharerListRequest weChatShopSharerListRequest;
......@@ -69,8 +69,13 @@ public class UserServiceImpl implements IUserService {
sharerInfo.setUpdateTime(now);
sharerInfoMapper.insert(sharerInfo);
}
LoginUserInfo loginUserInfo = new LoginUserInfo();
loginUserInfo.setOpenId(sharerInfo.getOpenId());
loginUserInfo.setSharerAppId(null);
// 生成token
String token = LoginUserContextHolder.generateToken(bo.getCode());
String token = LoginUserContextHolder.generateToken(bo.getCode(), loginUserInfo.getOpenId());
loginUserInfo.setAccessToken(token);
loginUserHelper.setLoginUserInfo(token, loginUserInfo);
return UserTokenVO.builder().token(token).build();
}
......
package com.netease.yanxuan.wx.store.sharer.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* des: 登录注解
* 限制只有登录才能访问的接口加此注解
* @author :XDD
* @ date : 2020/9/11 14:09
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}
package com.netease.yanxuan.wx.store.sharer.web.controller;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.bo.LoginBO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.vo.SharerInfoVO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.vo.UserCommissionRatioVO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.vo.UserTokenVO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.vo.SharerInfoVO;
import com.netease.yanxuan.wx.store.sharer.biz.service.IUserService;
import com.netease.yanxuan.wx.store.sharer.common.annotation.LoginRequired;
import com.netease.yanxuan.wx.store.sharer.common.core.Result;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
......@@ -37,7 +36,6 @@ public class UserController extends BaseController {
/**
* 刷新用户信息
*/
@LoginRequired
@PostMapping("/refreshUserInfo")
public Result<SharerInfoVO> refreshUserInfo() {
SharerInfoVO result = iUserService.refreshUserInfo();
......@@ -47,7 +45,6 @@ public class UserController extends BaseController {
/**
* 用户信息
*/
@LoginRequired
@PostMapping("/getUserInfo")
public Result<SharerInfoVO> getUserInfo() {
SharerInfoVO result = iUserService.getUserInfo();
......@@ -57,7 +54,6 @@ public class UserController extends BaseController {
/**
* 查询平台默认的分佣比例
*/
@LoginRequired
@PostMapping("/getCommissionRatioDefault")
public Result<UserCommissionRatioVO> getCommissionRatioDefault() {
UserCommissionRatioVO result = iUserService.getCommissionRatioDefault();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment