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
  • 相关阅读:
    Tarjan算法求双连通分量
    Tarjan
    前端技术实现js图片水印
    记录一下ionic canvas图片,还有canvas里面的图片跨域的问题
    ionic cordova screenshot 使用和操作
    关于ionic2 更新到ionic3 后组件不能用的解决方案
    背景图处理,这是个好东西记录一下
    radio样式的写法,单选和多选如何快速的改变默认样式,纯CSS,
    ionic使用cordova插件中的Screenshot截图分享功能
    ionic中执行pop返回上一个页面,还需要执行操作
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/13215181.html
Copyright © 2011-2022 走看看