springboot集成攔截器


一.首先對HandlerInterceptor進行封裝,封裝為MappingInterceptor.封裝的方法里添加攔截器起作用的路徑addPathPatterns(),及需要排除路徑的方法excludePathPatterns()

public interface MappingInterceptor extends HandlerInterceptor {
    String[] addPathPatterns();

    String[] excludePathPatterns();

    int order();
}

二.寫攔截器,攔截器實現封裝好的MappingInterceptor,同時在攔截器上添加@Component,作用是將該攔截器注入到容器中以方便通過@Autowired實現實例注入.

@Component
public class CrossOriginInterceptor implements MappingInterceptor {

    private static final Logger logger= LoggerFactory.getLogger(CrossOriginInterceptor.class);

    @Override
    public String[] addPathPatterns() {
        return new String[]{"/**"};
    }

    @Override
    public String[] excludePathPatterns() {
        return new String[0];
    }

    @Override
    public int order() {
        return 0;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("允許的頭信息"+request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        //是否允許瀏覽器攜帶用戶身份信息(cookie)
        response.setHeader("Access-Control-Allow-Credentials","true");
        return true;
    }

    @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 {

    }
}

三.將攔截器注冊到項目中.在類名上添加@Configuration作為配置類在啟動的時候實例化好,該類需要實現WebMvcConfigurer接口,然后將寫好的攔截器通過 @Autowired注解注入到當前類中,然后重寫addInterceptors方法,在方法中注冊攔截器,並添加需要攔截的路徑及需要排除的路徑,注冊的順序代表攔截器執行的順序.WebConfigurer需要實現 WebMvcConfigurer 這個接口,並實現里面的兩個方法。(在老版本的 spring-boot 中使用的是WebMvcConfigurerAdapter,新版本中已過時!!!還有不能通過繼承 WebMvcConfigurationSupport 這個類來實現,這樣會在某些情況下失效!!!),第二個 addInterceptors 方法用來注冊添加攔截器。

@Configuration
public class WebConfigurer implements WebMvcConfigurer {
    @Autowired
    private CrossOriginInterceptor crossOriginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(crossOriginInterceptor).addPathPatterns(crossOriginInterceptor.addPathPatterns()); 
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM