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 @     阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示