1、引入spring 、spring boot依赖,这部分不再多说,正常开发spring boot项目就可以。
2、定义类,实现WebMvcConfigurer接口
package com.hmblogs.config;
import com.hmblogs.config.web.interceptor.PortalTokenInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
PortalTokenInterceptor tokenInterceptor = (PortalTokenInterceptor) SpringFactory.getBean("portalTokenInterceptor");
InterceptorRegistration tokenRegistration = registry.addInterceptor(tokenInterceptor);
tokenRegistration.addPathPatterns("/**");
tokenRegistration.excludePathPatterns("/swagger-ui.html")
.excludePathPatterns("/doc.html")
.excludePathPatterns("/swagger-ui.html/**")
.excludePathPatterns("/swagger**")
.excludePathPatterns("/**/swagger**")
.excludePathPatterns("/configuration/ui")
.excludePathPatterns("/**/configuration/ui")
.excludePathPatterns("/swagger-resources")
.excludePathPatterns("/**/swagger-resources")
.excludePathPatterns("/configuration/security")
.excludePathPatterns("/**/configuration/security")
.excludePathPatterns("/v2/api-docs")
.excludePathPatterns("/error")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/**/favicon.ico")
.excludePathPatterns("/login/**")
.excludePathPatterns("/v3/secStaff/checkUserExistByEmail")
.excludePathPatterns("/v3/secStaff/register")
.excludePathPatterns("/v3/secStaff/sendVerifyCode")
.excludePathPatterns("/v3/secStaff/checkEmail")
.excludePathPatterns("/v3/secStaff/checkPhone")
.excludePathPatterns("/v3/secStaff/checkVerifyCode")
;
}
}
3、定义拦截器,实现HandlerInterceptor接口
package com.blogs.config.web.interceptor;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import liquibase.util.MD5Util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.Duration;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Component
public class PortalTokenInterceptor implements HandlerInterceptor {
@Autowired
private RedisService redisService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//获取token
String token = request.getHeader("Authoritarian");
log.info("-----------token:" + token);
//token为空,则返回401
if(StringUtils.isEmpty(token)) {
response.setStatus(HttpStatus.HTTP_UNAUTHORIZED);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(JSONUtil.toJsonStr(RestResponse.failed(ResultCode.UN_AUTHORIZED, "认证失败")));
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}