SpringBootフィルタとフィルタの設定Servlet3.0

@ServletComponentScanを追加するファーストクラスの開始、スキャン

@SpringBootApplication
@ServletComponentScan //过滤器注解 servlet 3.0
public class xxBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(xxBootApplication.class, args);
    }

}

実装フィルタと追加のコメントは春スキャンされ、彼はフィルタとしてクラスをマークしてみましょう@WebFilterというクラスを作成します。 

 

@WebFilter(urlPatterns = "/" ,filterName = "LoginFilter") //urlPatterns  这里匹配拦截的规则 / 表示所有的拦截  可以指定到一个包下面的方法 
public class LoginFilter implements Filter {

    /*
    * 过滤器
    * */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       if(){
          filterChain.doFilter(servletRequest,servletResponse); //放行
       }else{
          // 不放行
       }

    }
}
自定义拦截器 HandlerInterceptor
Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解
    
    1、@Configuration
        继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本)
        SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer
    2.自定义拦截器 HandlerInterceptor
        preHandle:调用Controller某个方法之前
        postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
        afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
    3.Filter
        是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
        Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等

        依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
    
        在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
        
        Filter和Interceptor的执行顺序
         
        过滤前->拦截前->action执行->拦截后->过滤后
首先新建一个拦截的方法
 
パブリッククラスLoginIntercepter実装HandlerInterceptor { 
    @Override 
    preHandleブールパブリック(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラ)が例外{スロー
        System.err.println( "---->进入方法之前を"); 
        HandlerInterceptor.super.preHandle(要求、応答、ハンドラ)を返します。
    } 

    @Override 
    公共ボイドpostHandle(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラのModelAndViewのModelAndView)は例外{スロー
        System.err.println( "---->进入方法之中を"); 
    } 

    @Override 
    公共ボイドafterCompletion(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラは、例外exは){例外をスロー 
        System.err.println( "----进入了方法之后")。
    } 
}

HandlerInterceptorは内部の要求を定義するための操作を行うことがないような方法で書き換えを実現します

次に、新しいクラス定義の傍受の実装が傍受定義WebMvcConfigurer

@Configuration 
パブリッククラスが実装WebMvcConfigurer {WebMvcConfigurerTest 
    プロセスに対応したファイルを傍受するリクエストインターセプタで//カスタムを以前の動作要求で行わLoginIntercepterにジャンプ
    @Override 
    ます。public void addInterceptors(InterceptorRegistryレジストリ){ 
        レジストリ。 addInterceptor(新しい新しいLoginIntercepter())addPathPatterns( "/ **");. 
    } 
}

 拦截器不生效常见问题:
        1)是否有加@Configuration
        2)拦截路径是否有问题 **  和 * 
        3)拦截器最后路径一定要 “/**”, 如果是目录的话则是 /*/

 

公開された10元の記事 ウォンの賞賛0 ビュー514

おすすめ

転載: blog.csdn.net/DNCCCC/article/details/105031585
おすすめ