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; 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.AuthInterceptor;
import com.netease.yanxuan.wx.store.sharer.biz.interceptor.UserInterceptor;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.Collections;
/** /**
* @Description 配置 * @Description 配置
* @Author fanjiaxin * @Author fanjiaxin
...@@ -15,10 +19,27 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; ...@@ -15,10 +19,27 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@RequiredArgsConstructor @RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer { public class WebConfig implements WebMvcConfigurer {
private final AuthInterceptor authInterceptor; 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 @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor) registry.addInterceptor(authInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(getExcludePathPatterns());
registry.addInterceptor(userInterceptor)
.addPathPatterns("/**"); .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; ...@@ -3,8 +3,6 @@ package com.netease.yanxuan.wx.store.sharer.biz.core;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
/** /**
* @Description 授权上下文 * @Description 授权上下文
* @Author fanjiaxin * @Author fanjiaxin
...@@ -29,10 +27,10 @@ public class LoginUserContextHolder { ...@@ -29,10 +27,10 @@ public class LoginUserContextHolder {
/** /**
* 生成用户Token * 生成用户Token
*/ */
public static String generateToken(String code) { public static String generateToken(String code, String openId) {
return Jwts.builder() return Jwts.builder()
.claim("time", new Date().getTime()) .claim("code", code)
.signWith(SignatureAlgorithm.HS256, code) .signWith(SignatureAlgorithm.HS256, openId)
.compact(); .compact();
} }
} }
...@@ -35,7 +35,6 @@ public class LoginUserHelper { ...@@ -35,7 +35,6 @@ public class LoginUserHelper {
* 保存用户认证信息 * 保存用户认证信息
*/ */
public void setLoginUserInfo(String token, LoginUserInfo loginUserInfo) { public void setLoginUserInfo(String token, LoginUserInfo loginUserInfo) {
LoginUserContextHolder.set(loginUserInfo);
redisClient.setStr(CoreConstant.REDIS_TOKEN_USER_KEY + token, redisClient.setStr(CoreConstant.REDIS_TOKEN_USER_KEY + token,
JSON.toJSONString(loginUserInfo), CoreConstant.REDIS_TOKEN_EXPIRE_SECONDS); JSON.toJSONString(loginUserInfo), CoreConstant.REDIS_TOKEN_EXPIRE_SECONDS);
} }
......
...@@ -3,20 +3,16 @@ package com.netease.yanxuan.wx.store.sharer.biz.interceptor; ...@@ -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.LoginUserContextHolder;
import com.netease.yanxuan.wx.store.sharer.biz.core.LoginUserHelper; 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.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.constant.CoreConstant;
import com.netease.yanxuan.wx.store.sharer.common.exception.NoAuthException; 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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/** /**
* @Description 鉴权拦截器 * @Description 鉴权拦截器
...@@ -27,35 +23,22 @@ import java.lang.reflect.Method; ...@@ -27,35 +23,22 @@ import java.lang.reflect.Method;
@RequiredArgsConstructor @RequiredArgsConstructor
@Component @Component
public class AuthInterceptor implements HandlerInterceptor { public class AuthInterceptor implements HandlerInterceptor {
private final RedisClient redisClient; private final LoginUserHelper loginUserHelper;
private final LoginUserHelper jwtHelper;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
log.info("AuthInterceptor preHandle execute, url:{}", request.getRequestURI()); 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); String token = request.getHeader(CoreConstant.AUTH_HEADER_TOKEN_KEY);
log.info("AuthInterceptor preHandle token:{}", token); log.info("AuthInterceptor preHandle token:{}", token);
LoginUserInfo loginUserInfo;
if (null != validateAnnotation) {
if (StringUtils.isBlank(token)) { if (StringUtils.isBlank(token)) {
throw new NoAuthException("用户认证失败,TOKEN为空"); throw new NoAuthException("用户认证失败,TOKEN为空");
} }
loginUserInfo = jwtHelper.getLoginUserInfo(token); LoginUserInfo loginUserInfo = loginUserHelper.getLoginUserInfo(token);
if (null == loginUserInfo) { if (null == loginUserInfo) {
log.info("用户登录状态过期,token缓存失效,path:{}", request.getServletPath()); log.info("用户登录状态过期,token缓存失效,path:{}", request.getServletPath());
throw new NoAuthException("用户登录状态过期"); throw new NoAuthException("用户登录状态过期");
} }
} else if (StringUtils.isNotBlank(token)) {
loginUserInfo = jwtHelper.getLoginUserInfo(token);
if (null != loginUserInfo) {
// 刷新缓存
jwtHelper.setLoginUserInfo(token, loginUserInfo);
}
}
return true; 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 { ...@@ -43,7 +43,7 @@ public class UserServiceImpl implements IUserService {
private final SharerInfoMapper sharerInfoMapper; private final SharerInfoMapper sharerInfoMapper;
private final DrmSharerConfig drmSharerConfig; private final DrmSharerConfig drmSharerConfig;
private final LoginUserHelper jwtHelper; private final LoginUserHelper loginUserHelper;
private final WeChatUserInfoRequest weChatUserRequest; private final WeChatUserInfoRequest weChatUserRequest;
private final WeChatShopSharerRegisterBindRequest weChatShopSharerRegisterBindRequest; private final WeChatShopSharerRegisterBindRequest weChatShopSharerRegisterBindRequest;
private final WeChatShopSharerListRequest weChatShopSharerListRequest; private final WeChatShopSharerListRequest weChatShopSharerListRequest;
...@@ -69,8 +69,13 @@ public class UserServiceImpl implements IUserService { ...@@ -69,8 +69,13 @@ public class UserServiceImpl implements IUserService {
sharerInfo.setUpdateTime(now); sharerInfo.setUpdateTime(now);
sharerInfoMapper.insert(sharerInfo); sharerInfoMapper.insert(sharerInfo);
} }
LoginUserInfo loginUserInfo = new LoginUserInfo();
loginUserInfo.setOpenId(sharerInfo.getOpenId());
loginUserInfo.setSharerAppId(null);
// 生成token // 生成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(); 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; 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.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.UserCommissionRatioVO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.vo.UserTokenVO; 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.biz.service.IUserService;
import com.netease.yanxuan.wx.store.sharer.common.annotation.LoginRequired;
import com.netease.yanxuan.wx.store.sharer.common.core.Result; import com.netease.yanxuan.wx.store.sharer.common.core.Result;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -37,7 +36,6 @@ public class UserController extends BaseController { ...@@ -37,7 +36,6 @@ public class UserController extends BaseController {
/** /**
* 刷新用户信息 * 刷新用户信息
*/ */
@LoginRequired
@PostMapping("/refreshUserInfo") @PostMapping("/refreshUserInfo")
public Result<SharerInfoVO> refreshUserInfo() { public Result<SharerInfoVO> refreshUserInfo() {
SharerInfoVO result = iUserService.refreshUserInfo(); SharerInfoVO result = iUserService.refreshUserInfo();
...@@ -47,7 +45,6 @@ public class UserController extends BaseController { ...@@ -47,7 +45,6 @@ public class UserController extends BaseController {
/** /**
* 用户信息 * 用户信息
*/ */
@LoginRequired
@PostMapping("/getUserInfo") @PostMapping("/getUserInfo")
public Result<SharerInfoVO> getUserInfo() { public Result<SharerInfoVO> getUserInfo() {
SharerInfoVO result = iUserService.getUserInfo(); SharerInfoVO result = iUserService.getUserInfo();
...@@ -57,7 +54,6 @@ public class UserController extends BaseController { ...@@ -57,7 +54,6 @@ public class UserController extends BaseController {
/** /**
* 查询平台默认的分佣比例 * 查询平台默认的分佣比例
*/ */
@LoginRequired
@PostMapping("/getCommissionRatioDefault") @PostMapping("/getCommissionRatioDefault")
public Result<UserCommissionRatioVO> getCommissionRatioDefault() { public Result<UserCommissionRatioVO> getCommissionRatioDefault() {
UserCommissionRatioVO result = iUserService.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