Java秒杀系统(九)分布式session

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 21:26   11   0

创建UUID


生成cookie


//设置有效期。


//参数校验


@Configuration
public class WebConfig  extends WebMvcConfigurerAdapter{
 
 @Autowired
 UserArgumentResolver userArgumentResolver;
 
 @Override
 public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
  argumentResolvers.add(userArgumentResolver);
 }
 
 //回调方法
}
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import cn.tedu.miaosha.domain.MiaoshaUser;
import cn.tedu.miaosha.service.MiaoshaUserService;

@Service
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

 @Autowired
 MiaoshaUserService userService;
 
 public boolean supportsParameter(MethodParameter parameter) {
  Class<?> clazz = parameter.getParameterType();
  return clazz==MiaoshaUser.class;
 }

 public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
   NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
  HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
  HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
  
  String paramToken = request.getParameter(MiaoshaUserService.COOKI_NAME_TOKEN);
  String cookieToken = getCookieValue(request, MiaoshaUserService.COOKI_NAME_TOKEN);
  if(StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)) {
   return null;
  }
  String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken;
  return userService.getByToken(response, token);
 }

 private String getCookieValue(HttpServletRequest request, String cookiName) {
  Cookie[]  cookies = request.getCookies();
  for(Cookie cookie : cookies) {
   if(cookie.getName().equals(cookiName)) {
    return cookie.getValue();
   }
  }
  return null;
 }

}



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP