SpringBoot中请求拦截体系

32361-20180530095349427-444141538.png

avatar

【pom.xml】

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.3.0.RELEASE</version>
</dependency>

【拦截器】

import org.slf4j.Logger;
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 static org.slf4j.LoggerFactory.getLogger;
@Component
public class CustomRequestInterceptor implements HandlerInterceptor {
    private static final Logger logger = getLogger(CustomRequestInterceptor.class);
    private final String[] whitelist = new String[]{
            "test",
    };

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 白名单api放行
        String url = request.getRequestURI();
        for (String s : whitelist) {
            if (url.contains(s)) {
                return HandlerInterceptor.super.preHandle(request, response, handler);
            }
        }

        // 拦截标志,默认不拦截
        Boolean filterFlag = false;

        // 拦截条件一
		String token = request.getHeader("token");
		if (StrUtil.isEmpty(token)) {
			filterFlag = true;
        }
        // 拦截条件二
		// ...

        if (filterFlag) {
            logger.info("######################### \t[ 拦截请求 ]\t #########################");
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write("{\"msg\":\"请求异常!\",\"code\":400}");
            response.setStatus(400);
            response.flushBuffer();
            // 返回false既为拦截
            return false;
        }
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

【配置拦截器】

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * @author JHL
 * @version 1.0
 * @since : JDK 11
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private CustomRequestInterceptor customRequestInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 路径支持正则匹配
        registry.addInterceptor(customRequestInterceptor).addPathPatterns("/**/**");
    }
}

请求拦截过滤参考:

https://mrbird.cc/Spring-Boot-Filter-Interceptor.html

代码参考:

https://blog.csdn.net/someday____/article/details/126308356

posted @ 2022-09-26 09:42  黄河大道东  阅读(96)  评论(0)    收藏  举报