天天看點

springboot學習之攔截器配置

攔截器(Interceptor)實作對每一個請求處理前後進行相關的業務處理,類似Servlet的Filter。 Spring boot中快速實作攔截器的方式: 1、實作HandlerInterceptor接口。 2、繼承HandlerInterceptorAdaptor類來實作。 下面具體示範過程,該過程是基于搭建好的maven spring boot環境實作: 方式一:通過實作HandlerInterceptor接口。

a、建立DemoInterceptor,然後implements類HandlerInterceptor

package com.wanghp.demo.configurer;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * description:
 * created by wanghaiping
 * created date 2017/12/10
 */
public class DemoInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("----------使用接口實作的方式實作(在請求發生之前執行)---------");

        return true;// 隻有傳回true才會繼續向下執行,傳回false取消目前請求
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("----------使用接口實作的方式實作(在請求發生之後執行)---------");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("----------使用接口實作的方式實作(在請求發生之後執行),但是在DispatcherServlet 渲染了對應的視圖之後執行(主要是用于進行資源清理工作)---------");
    }


}
           

b、建立配置類,并注冊攔截器

package com.wanghp.demo.configurer;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * description:
 * created by wanghaiping
 * created date 2017/12/10
 */
@Configuration
public class DemoWebMvcConfigurer extends WebMvcConfigurerAdapter {


     public void addInterceptors(InterceptorRegistry registry){
         // 多個攔截器組成一個攔截器鍊
         // addPathPatterns 用于添加攔截規則
         // excludePathPatterns 使用者排除攔截
         registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/**");
         //registry.addInterceptor(new DemoInterceptor1()).addPathPatterns("/**");
         super.addInterceptors(registry);
     }

}
           

c、建立測試Controller,并在浏覽器進行通路測試。

package com.wanghp.demo.spring.controller;

import com.wanghp.demo.spring.commontest.readconfig.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * description:
 * created by wanghaiping
 * created date 2017/12/8
 */
@RestController
@RequestMapping("/testController")
public class TestController {
    @GetMapping("/testController")
    public String test(){
        return "test";
    }

}
           

d、測試結果如下

通路:http://localhost:8080/demo/testController/testController 結果:

springboot學習之攔截器配置

方式二:通過繼承HandlerInterceptorAdaptor類來實作。。

a、建立DemoInterceptor1,然後繼承HandlerInterceptorAdaptor

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * description: 使用繼承的方式實作攔截器,選擇性的重寫相關的類即可
 * created by wanghaiping
 * created date 2017/12/10
 */
public class DemoInterceptor1 extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("----------使用繼承類的方式實作(在請求發生之前執行)---------");
        return true;// 隻有傳回true才會繼續向下執行,傳回false取消目前請求
    }




}
           

b、建立配置類,并注冊攔截器

package com.wanghp.demo.configurer;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * description:
 * created by wanghaiping
 * created date 2017/12/10
 */
@Configuration
public class DemoWebMvcConfigurer extends WebMvcConfigurerAdapter {


     public void addInterceptors(InterceptorRegistry registry){
         // 多個攔截器組成一個攔截器鍊
         // addPathPatterns 用于添加攔截規則
         // excludePathPatterns 使用者排除攔截
         //registry.addInterceptor(new DemoInterceptor()).addPathPatterns("/**");
         registry.addInterceptor(new DemoInterceptor1()).addPathPatterns("/**");
         super.addInterceptors(registry);
     }

}
           

c、建立測試Controller,并在浏覽器進行通路測試。

package com.wanghp.demo.spring.controller;

import com.wanghp.demo.spring.commontest.readconfig.GirlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * description:
 * created by wanghaiping
 * created date 2017/12/8
 */
@RestController
@RequestMapping("/testController")
public class TestController {
    @GetMapping("/testController")
    public String test(){
        return "test";
    }

}
           

d、測試結果如下

通路:http://localhost:8080/demo/testController/testController 結果:

springboot學習之攔截器配置
springboot學習之攔截器配置

繼續閱讀