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 {
-
- }
- }