先附上原本的代码:
项目中,用了拦截器,用于简化限流判断
@Service
public class AccessInterceptor extends HandlerInterceptorAdapter{
@Autowired
MiaoshaUserService miaoshaUserService;
@Autowired
RedisService redisService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if(handler instanceof HandlerMethod) {
//先去取得用户做判断
MiaoshaUser user=getUser(request,response);
//将user保存下来
UserContext.setUser(user);
HandlerMethod hm=(HandlerMethod)handler;
AccessLimit aclimit=hm.getMethodAnnotation(AccessLimit.class);
//无该注解的时候,那么就不进行拦截操作
if(aclimit==null) {
return true;
}
//获取参数
int seconds=aclimit.seconds();
int maxCount=aclimit.maxCount();
boolean needLogin=aclimit.needLogin();
String key=request.getRequestURI();
System.out.println("------------:"+key);
if(needLogin) {
if(user==null) {
//需要给客户端一个提示
render(response,CodeMsg.SESSION_ERROR);
return false;
}
//需要的登录
key+="_"+user.getId()