BlogJava 首頁 新隨筆 聯系 聚合 管理
            37 Posts :: 64 Stories :: 21 Comments :: 0 Trackbacks

          Filter作用 :
           每當使用應用服務器頁面或servlet的時候,應用服務器就會根據web.xml里面配置的filter 去進行過濾理。
           
          調用處理過程就是:
           1.接受request->去處理第一個filter.init-> 處理第一個filter.doFilter
           2.如果不想繼續使用filter過濾就在filter.doFilter中使用 return
            3.如果要繼續使用filter過濾就filter.doFilter中 chain.doFilter(servletRequest, servletResponse);

          使用例子:
            1.web.xml配置
            <filter>
                  <filter-name>Filter_name</filter-name>
                  <filter-class>Filter_class_name</filter-class>
                  <init-param>
                      <description>set 'true' to enable the filter</description>
                      <param-name>enabled</param-name>
                      <param-value>true</param-value>
                  </init-param>
            <init-param>
                   <param-name>excepts</param-name>
             <param-value>Excepts_Path</param-value>
                  </init-param>
              </filter>
           <filter-mapping>
               <filter-name>Filter_name</filter-name>
               <url-pattern>filter_path</url-pattern>
              </filter-mapping>
              <filter-mapping>
                  <filter-name>Filter_name</filter-name>
                  <url-pattern>filter_path</url-pattern>
              </filter-mapping>

             2、java代碼
           
           2.1 init 函數
           public void init(FilterConfig filterConfig) throws ServletException {

                  //檢查是否打開SSOFilter功能
                  String _enable = filterConfig.getInitParameter("enabled");
                  if (_enable != null && "true".equalsIgnoreCase(_enable)) {
                      enabled = true;
                  }

                  //初始化例外列表,即不經過SSOFilter的請求地址
                  String _exceptStr = filterConfig.getInitParameter("excepts");
                  if (_exceptStr != null) {
                      String[] _excepts = _exceptStr.split(",");
                      for (int i = 0; i < _excepts.length; i ++) {
                          excepts.add(_excepts[i]);
                      }
                  }
                }
           
           2.2 doFilter函數
           public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                                   FilterChain chain) throws IOException, ServletException {

                  HttpServletRequest request = (HttpServletRequest) servletRequest;
                  HttpServletResponse response = (HttpServletResponse) servletResponse;
                  String path = request.getServletPath();

                  /**
                   * 當WEB程序啟了SSOFilter,并且請求的路徑沒被配置為例外時,
                   * 檢查用戶是否已通過統一用戶平臺登錄,已登錄的話創建會話,否則轉到統一登錄頁面。
                   */
                  if (enabled && !excepts.contains(path)) {

                      if (logger.isDebugEnabled()) {
                          logger.debug("check member has signoned ...");
                      }

                      boolean signOned = SSOHelper.hasSignOned(request, response);

                      if (logger.isDebugEnabled()) {
                          logger.debug("Signoned? " + signOned);
                      }

                      if (!signOned) {
                          String SSOContextUri = SysParamHelper.getSysParam(SysParamConstants.CONTEXT_URI_SSO);
                          StringBuffer url = new StringBuffer(SSOContextUri);
                          url.append("/Login");
                          //記住入口地址
                          url.append("?entrance=");
                          url.append(request.getRequestURL());
                          if (request.getQueryString() != null) {
                              url.append("|");
                              url.append(request.getQueryString());
                          }
                          response.sendRedirect(url.toString());
                          return;
                      }
                  }
                   chain.doFilter(servletRequest, servletResponse);
                 }

          posted on 2009-09-22 11:06 xiachang88 閱讀(589) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 古蔺县| 沁阳市| 三穗县| 潼关县| 张家港市| 安吉县| 宜良县| 临夏县| 鸡西市| 新沂市| 郑州市| 东海县| 远安县| 余江县| 乐业县| 江西省| 阿城市| 定日县| 茂名市| 新民市| 富民县| 仙游县| 曲松县| 河曲县| 来宾市| 霍城县| 郧西县| 秀山| 偃师市| 贡嘎县| 栾城县| 祁门县| 浦城县| 平阴县| 安仁县| 柘城县| 威海市| 胶南市| 大城县| 抚顺县| 三河市|