拦截器的使用
Step 1 创建拦截器(util/interceptor/TokenInterceptor.class)
package com.ren.draw.util.Interceptor;
import com.ren.draw.util.exception.RenException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author: Gavin
* @created: 2022/2/23 23:44
* @description:
**/
/**
* 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login
*/
@Component
public class TokenInterceptor implements HandlerInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(TokenInterceptor.class);
@Autowired
HttpServletRequest httpServletRequest;
@Resource
private RedisTemplate redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = httpServletRequest.getHeader("token");
LOG.info("token:"+token);
if(ObjectUtils.isEmpty(token)) {
throw new RenException("token不存在",401);
}else if(ObjectUtils.isEmpty(redisTemplate.opsForValue().get(token))){
throw new RenException("token无效",401);
}
// 打印请求信息
LOG.info("------------- LogInterceptor 开始 -------------");
LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
LOG.info("远程地址: {}", request.getRemoteAddr());
long startTime = System.currentTimeMillis();
request.setAttribute("requestStartTime", startTime);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
long startTime = (Long) request.getAttribute("requestStartTime");
LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
}
}
Step 2 创建SpringMvcConfig配置文件
package com.ren.draw.util.config;
import com.ren.draw.util.Interceptor.TokenInterceptor;
import com.ren.draw.util.aop.Aspect;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
/**
* @author: Gavin
* @created: 2022/2/23 23:23
* @description:
**/
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
// @Resource
// Aspect aspect;
@Resource
TokenInterceptor tokenInterceptor;
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(
"/sysUser/login",
// "/swagger/**",
// "/swagger-resources/**",
"/doc.html",
"/v3/api-docs/**"
);
// registry.addInterceptor(actionInterceptor)
// .addPathPatterns(
// "/*/save",
// "/*/delete/**",
// "/*/reset-password");
}
}


