zoukankan      html  css  js  c++  java
  • 【spring boot】spring boot 拦截器

    今日份代码:

    1.定义拦截器

    import com.alibaba.fastjson.JSON;
    import org.apache.commons.collections.CollectionUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.dubbo.common.logger.Logger;
    import org.apache.dubbo.common.logger.LoggerFactory;
    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.io.PrintWriter;
    import java.util.*;
    import java.util.regex.Pattern;
    import java.util.stream.Collectors;
    
    
    /**
     * Spring boot拦截器
     */
    @Component
    public class MyInterceptor  implements HandlerInterceptor {
    
        private final static Logger log = LoggerFactory.getLogger(MyInterceptor.class);
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            boolean pass = true;
            
            String methodType = request.getMethod(); //GET 或 POST
            String url = request.getRequestURI();
            String 入参值1 = request.getParameter("接口入参1");
            
    
            if (!pass) {
                response(request,response,"未通过拦截器校验");
            }
            return pass;
        }
    
        @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 {
    
        }
    
    
    
        //返回拦截消息给前端,解决跨域,编码问题
        private void response(HttpServletRequest request, HttpServletResponse response, String message) throws Exception{
            String origin = request.getHeader("Origin");
            if (StringUtils.isNotBlank(origin)) {
                if (origin.toLowerCase().indexOf(".XXX.com") > 0) {
                    response.setHeader("Access-Control-Allow-Origin", origin);  // 允许访问的域
                    response.setHeader("Access-Control-Allow-Methods", "POST,GET");// 允许GET、POST的外域请求
                    response.setHeader("Access-Control-Allow-Credentials", "true"); // 允许请求带cookie到服务器
                    response.setContentType("text/html; charset=utf-8"); // 设定JSON格式标准输出、及编码
                }
            }
    
            PrintWriter pw = response.getWriter();
            pw.write(JSON.toJSONString(message));
            pw.flush();
            pw.close();
        }
    }
    View Code

    2.注册拦截器

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.servlet.config.annotation.CorsRegistry;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import javax.annotation.Resource;
    
    /**
     * 拦截器配置
     */
    @ControllerAdvice
    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {
    
        @Resource
        private MyInterceptor myInterceptor;
        @Resource
        private MyInterceptor2 myInterceptor2;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //多个拦截器  按照代码顺序 从上到下先后进入
            registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/XXX/111","/YYY/222");
            registry.addInterceptor(myInterceptor2).addPathPatterns("/**");
        }
    
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                    .maxAge(3600)
                    .allowCredentials(true);
        }
        
    }
    View Code

    3.扫描拦截器

    启动类上需要保证 拦截器定义的位置 可以被Spring扫描到:
    @SpringBootApplication
    @ComponentScan(basePackages = {"com.XX.*", "com.YY.*"})
    View Code
  • 相关阅读:
    Linux下C程序的反汇编【转】
    数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)【转】
    linux arm的存储分布那些事之一【转】
    linux arm mmu基础【转】
    linux 进程内存解析【转】
    如何更方便的查看Linux内核代码的更新记录【转】
    设备树解析【转】
    分析内核源码,设备树【转】
     Meltdown论文翻译【转】
    device tree --- #address-cells and #size-cells property【转】
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/13215181.html
Copyright © 2011-2022 走看看