Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 成人精品视频一区二区在线,老司机精品99在线播放,久久久国产免费影院

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          java中Filter的幾種實現方式

          實現Filter的幾種方法

          問題點:如何應用過濾器?實現過濾器有哪些方法?

          過濾器的作用:在javaweb的中過濾器的主要作用是過濾指定路徑格式的接口,在請求前后做處理,既可以更改請求頭也可以更改請求的返回值。

          應用場景:改變請求頭信息、添加新的請求頭內容、判斷來自客戶端的內容是否存在非法信息等等!

          實現過濾器的幾種常見的方式:

          // 實現Filter接口
          @Component  // 通過Component注解讓Spring容器自動為我們創建實例
          public class MyFilter implements Filter {
              
              // 銷毀過濾器時調用的方法(默認不用實現)
              @Override
              public void destroy() {
                  Filter.super.destroy();
              }
              // 初始化方法(默認不用實現該方法)
              @Override
              public void init(FilterConfig filterConfig) throws ServletException {
                  Filter.super.init(filterConfig);
              }
              @Override
              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                  // 請求接口前操作
                  // 調用接口方法前需要執行的代碼
          		filterChain.doFilter(servletRequest,servletResponse);  // 放行到下一個過濾器
                  // 請求接口后操作
                  // 調用接口方法后需要執行的代碼
              }
          }
          

          上述方式一的實現比較簡單,但是這種方式有一個缺陷(漏洞);大家請注意上面的過濾器對象是由注解自動配置并創建的,這樣就是默認值**“/*”**,所以過濾范圍是所有接口。

          基于方式一的漏洞問題做了如下的改動:

          // 實現Filter接口
          public class MyFilter implements Filter {
              
              // 銷毀過濾器時調用的方法(默認不用實現)
              @Override
          

          登錄過濾器怎么寫_使用過濾器實現用戶登錄控制_java 過濾器實現登錄

          public void destroy() { Filter.super.destroy(); } // 初始化方法(默認不用實現該方法) @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 請求接口前操作 // 調用接口方法前需要執行的代碼 filterChain.doFilter(servletRequest,servletResponse); // 放行到下一個過濾器 // 請求接口后操作 // 調用接口方法后需要執行的代碼 } }

          上述的實現與方式一基本相同,唯一不同的地方就是沒有通過@注解進行注入容器。

          配置過濾器通過@Bean的方式:

          @Configuration
          public class MyFilterRegistration {
              @Bean
              public FilterRegistrationBean<MyFilter> registrationBean(){
                  // 創建FilterRegistrationBean,通過它配置過濾器
                  FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
                  registrationBean.setFilter(new MyFilter()); // 設置過濾器
                  registrationBean.addUrlPatterns("/device/*"); // 設置過濾器生效范圍
                  registrationBean.setName("myFilter"); // 過濾器名稱
                  registrationBean.setOrder(1); // 設置優先級
                  return registrationBean;
              }
          }
          

          方式二是實現Filter接口,并通過自定義配置類的方式將自定義的Filter實現注入到Spring容器。

          通過@注解實現:

          登錄過濾器怎么寫_java 過濾器實現登錄_使用過濾器實現用戶登錄控制

          // 實現Filter接口,通過WebFilter可以配置過濾范圍、name等參數
          @WebFilter(value = "/device/*",filterName = "myFilter",displayName = "thisIsFilter")
          public class MyFilter implements Filter {
              
              // 銷毀過濾器時調用的方法(默認不用實現)
              @Override
              public void destroy() {
                  Filter.super.destroy();
              }
              // 初始化方法(默認不用實現該方法)
              @Override
              public void init(FilterConfig filterConfig) throws ServletException {
                  Filter.super.init(filterConfig);
              }
              @Override
              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                  // 請求接口前操作
                  // 調用接口方法前需要執行的代碼
          		filterChain.doFilter(servletRequest,servletResponse);  // 放行到下一個過濾器
                  // 請求接口后操作
                  // 調用接口方法后需要執行的代碼
              }
          }
          

          注意點:通過@實現的時候還需要做一件事,否則@不生效;

          @ServletComponentScan  // 如果不標準該注解方式三將不會生效
          public class DisplayCoreApplication {
              public static void main(String[] args) {
                  SpringApplication.run(DisplayCoreApplication.class, args);
              }
          }
          

          總結:以上就是幾種實現過濾器的方式,個人比較推薦方式二,因為這樣可以將所有的自定義過濾器統一通過一個配置類注入到容器,后期查看時也是一目了然!當然方式三更加的簡潔,視情況而定吧。


          主站蜘蛛池模板: 天美传媒一区二区三区| 亚洲av成人一区二区三区在线播放| 亚洲一区二区三区首页| 天堂成人一区二区三区| 日韩免费无码视频一区二区三区 | 久久一区二区精品综合| 精品无码一区二区三区在线| 春暖花开亚洲性无区一区二区| 国产精品一区二区无线| 97久久精品一区二区三区| 熟女少妇精品一区二区| 国产精品一区二区在线观看| 久久久久人妻精品一区三寸 | 99久久精品国产一区二区成人 | 亚洲熟女综合色一区二区三区| 久久国产午夜一区二区福利| 日韩精品一区二区三区不卡| 国产AV一区二区精品凹凸| 理论亚洲区美一区二区三区| 国精产品一区一区三区有限公司| 97精品国产一区二区三区| 精品无人区一区二区三区在线| 国产精品视频分类一区| 麻豆果冻传媒2021精品传媒一区下载| 精品日韩亚洲AV无码一区二区三区| 久久久精品一区二区三区| 色窝窝无码一区二区三区| 亚洲国产日韩在线一区| 精品深夜AV无码一区二区老年| 国产精品一区二区在线观看| 亚洲国产一区二区三区在线观看 | 成人H动漫精品一区二区| 中文字幕一区二区三区久久网站 | 国产精品成人一区二区三区| 亚洲线精品一区二区三区影音先锋| 天码av无码一区二区三区四区 | 精品一区二区三区色花堂 | 日本一区二区三区在线网| 日韩视频免费一区二区三区| 一区二区三区在线| 日韩在线视频一区|