• Interceptor拦截器demo


    Interceptor拦截器demo

    ##接口测试类
    @RestController
    public class TestController {
    
    @RequestMapping(value = "/myInterceptorsTestUrl", method = RequestMethod.GET)
        public String myInterceptorsTestUrl(HttpServletRequest request) {
            return request.getRequestURL().toString() +"-"+ request.getAttribute("name");
        }
    
        @RequestMapping(value = "/testUrl", method = RequestMethod.GET)
        public String testUrl(HttpServletRequest request) {
            return request.getRequestURL().toString() +"-"+ request.getAttribute("name");
        }
    
    }
    
    
    ##拦截器类
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.StringUtils;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyInterceptor implements HandlerInterceptor {
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle>>>拦截器");
            //设置编码
            request.setCharacterEncoding("UTF-8");
            //设置属性值
            request.setAttribute("name","hello,interceptor");
    
            //参数
            String path = request.getRequestURI();
    
            String reqMethod = request.getMethod();
            HandlerMethod hm = (HandlerMethod) handler;
            String userAgent = request.getHeader("User-Agent");
            String reqIp = getReqIpAddr(request);
            String reqUri = request.getServletPath();
            System.out.println("path=" + path);
            System.out.println("reqMethod=" + reqMethod);
            System.out.println("userAgent=" + userAgent);
            System.out.println("reqIp=" + reqIp);
            System.out.println("reqUri=" + reqUri);
    
            //调用
    //        hm.getMethod().invoke(hm);
            String methodName = hm.getMethod().getName();
            System.out.println("methodName=" + methodName);
    
            String beanName = hm.getBeanType().getName();
            System.out.println("beanName=" + beanName);
    
            return true; //return false; 不往后续执行
        }
    
        protected String getReqIpAddr(HttpServletRequest request) {
            String ip = null;
            try {
                ip = request.getHeader("x-forwarded-for");
                if (!StringUtils.hasText(ip) || "unknown".equalsIgnoreCase(ip)) {
                    ip = request.getHeader("Proxy-Client-IP");
                }
                if (!StringUtils.hasText(ip) || "unknown".equalsIgnoreCase(ip)) {
                    ip = request.getHeader("WL-Proxy-Client-IP");
                }
                if (!StringUtils.hasText(ip) || "unknown".equalsIgnoreCase(ip)) {
                    ip = request.getRemoteAddr();
                }
            } catch (Exception e) {
                logger.error("",e);
            }
            return ip;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle>>>拦截器");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion>>>拦截器");
        }
    }
    
    
    //拦截器注册类
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Configuration
    public class WebAPPMvcConfigurer implements WebMvcConfigurer {
    
        /**
         * 拦截器注册
         * @param registry
         *
         * http://localhost:8080/testUrl
         * 页面输出:http://localhost:8080/testUrl-null
         *
         * http://localhost:8080/myInterceptorsTestUrl
         * 页面输出:http://localhost:8080/myInterceptorsTestUrl-hello,interceptor
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //匹配规则
    //        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    
            //按请求地址来匹配,字符集合
            List<String> listPath = new ArrayList<>();
            listPath.add("/myInterceptorsTestUrl");
            registry.addInterceptor(new MyInterceptor()).addPathPatterns(listPath);
        }
    
    }

    或者在applicationContext.xml配置文件中配置

    <?xml version="1.0" encoding="UTF-8" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-3.2.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
           
    
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/myInterceptorsTestUrl"/>
                <bean class="com.example.mytest.interceptor.MyInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    
    </beans>
    //springboot启动类加载配置文件
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    import org.springframework.context.annotation.ImportResource;
    
    @EnableAspectJAutoProxy
    @SpringBootApplication
    @ImportResource("classpath:applicationContext.xml")
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }
  • 相关阅读:
    Linux基础命令-cp
    Linux基础命令-mkdir
    Linux基础命令-touch
    Linux基础命令-diff
    Linux基础命令-cut
    Linux基础命令-stat
    System.Web.HttpException: 请求在此上下文中不可用
    数据库日志删除、压缩操作
    如何收缩和删除SQL日志文件
    Excel 常用宏代码大全
  • 原文地址:https://www.cnblogs.com/oktokeep/p/16779564.html
Copyright © 2020-2023  润新知