最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)實(shí)例解析java過(guò)濾器和攔截器的區(qū)別

 更新時(shí)間:2020年03月30日 11:55:23   作者:未月廿三  
這篇文章主要介紹了通過(guò)實(shí)例解析java過(guò)濾器和攔截器的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

區(qū)別

1.使用范圍和規(guī)范不同

filter是servlet規(guī)范規(guī)定的,只能用在web程序中.

攔截器即可以用在web程序中, 也可以用于application, swing程序中, 是Spring容器內(nèi)的, 是Spring框架支持的

2.觸發(fā)時(shí)機(jī)不同

順序: Filter-->Servlet-->Interceptor-->Controller

  • 過(guò)濾器是在請(qǐng)求進(jìn)入容器后,但請(qǐng)求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請(qǐng)求結(jié)束返回也是,是在servlet處理完后,返回給前端之前過(guò)濾器處理。
  • 攔截器是方法到達(dá)Controller層之前生效的

3.過(guò)濾器的實(shí)現(xiàn)基于回調(diào)函數(shù)。而攔截器(代理模式)的實(shí)現(xiàn)基于反射,代理分靜態(tài)代理和動(dòng)態(tài)代理,動(dòng)態(tài)代理是攔截器的簡(jiǎn)單實(shí)現(xiàn)。

何時(shí)使用攔截器?何時(shí)使用過(guò)濾器?

  • 如果是非spring項(xiàng)目,那么攔截器不能用,只能使用過(guò)濾器。
  • 如果是處理controller前后,既可以使用攔截器也可以使用過(guò)濾器。
  • 如果是處理dispaterServlet前后,只能使用過(guò)濾器。

4.在action的生命周期中,攔截器可以多次被調(diào)用,而過(guò)濾器只能在容器初始化時(shí)被調(diào)用一次。

5.攔截器可以訪問(wèn)action上下文、值棧里的對(duì)象,而過(guò)濾器不能訪問(wèn)。

6.攔截器只能對(duì)action請(qǐng)求起作用,而過(guò)濾器則可以對(duì)幾乎所有的請(qǐng)求起作用。

7.攔截器可以獲取IOC容器中的各個(gè)bean,而過(guò)濾器就不行,在攔截器里注入一個(gè)service,可以調(diào)用業(yè)務(wù)邏輯。

SpringBoot使用過(guò)濾器

兩種方式:

1、使用spring boot提供的FilterRegistrationBean注冊(cè)Filter

2、使用原生servlet注解定義Filter

兩種方式的本質(zhì)都是一樣的,都是去FilterRegistrationBean注冊(cè)自定義Filter

封裝Filter

package com.theeternity.common.baseFilter;
import javax.servlet.Filter;
/**
 * @program: ApiBoot
 * @description: 封裝Filter
 * @author: TheEternity Zhang
 * @create: 2019-02-17 13:08
 */
public interface MappingFilter extends Filter {
  String[] addUrlPatterns();
  int order();
}

自定義Filter

package com.theeternity.beans.filterConfig;

import com.theeternity.common.baseFilter.MappingFilter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.FilterConfig;
import java.io.IOException;

/**
 * @program: ApiBoot
 * @description: 權(quán)限過(guò)濾器
 * @author: TheEternity Zhang
 * @create: 2019-02-17 13:14
 */
public class AuthFilter implements MappingFilter {

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

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

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
  }
}

注冊(cè)過(guò)濾器

package com.theeternity.beans.filterConfig;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @program: ApiBoot
 * @description: 注冊(cè)過(guò)濾器
 * @author: TheEternity Zhang
 * @create: 2019-02-17 13:10
 */
@Configuration
public class FilterConfig {

  @Bean
  public FilterRegistrationBean registFilter() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    AuthFilter authFilter=new AuthFilter();
    registration.setFilter(authFilter);
    registration.addUrlPatterns(authFilter.addUrlPatterns());
    registration.setOrder(authFilter.order());
    registration.setName("AuthFilter");
    return registration;
  }
}

SpringBoot使用攔截器

封裝Interceptor

package com.theeternity.common.baseInterceptor;
import org.springframework.web.servlet.HandlerInterceptor;
/**
 * @program: ApiBoot
 * @description: 封裝Interceptor
 * @author: TheEternity Zhang
 * @create: 2019-02-15 17:49
 */
public interface MappingInterceptor extends HandlerInterceptor {
  String[] addPathPatterns();

  String[] excludePathPatterns();

  int order();
}

自定義Interceptor

package com.theeternity.beans.interceptorConfig;

import com.theeternity.common.baseInterceptor.MappingInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * @program: BoxApi
 * @description: 跨域攔截器
 * @author: tonyzhang
 * @create: 2018-12-21 14:44
 */
@Component
public class CrossOriginInterceptor implements MappingInterceptor {

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

注冊(cè)Interceptor

package com.theeternity.beans.interceptorConfig;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @program: ApiBoot
 * @description: 攔截器注冊(cè)
 * @author: TheEternity Zhang
 * @create: 2019-02-15 17:55
 */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

  @Autowired
  private CrossOriginInterceptor crossOriginInterceptor;

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

  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

长沙县| 桐乡市| 河北省| 洛阳市| 鱼台县| 张掖市| 溧水县| 桂林市| 米脂县| 怀安县| 河曲县| 彰化市| 酒泉市| 石屏县| 沂源县| 海城市| 卓尼县| 浪卡子县| 苍山县| 鹤峰县| 新泰市| 鲜城| 文昌市| 吴江市| 千阳县| 怀远县| 德江县| 白城市| 璧山县| 望江县| 西充县| 清河县| 丹江口市| 彰化市| 郯城县| 班戈县| 虹口区| 汝阳县| 双流县| 甘肃省| 阳原县|