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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 博爱县| 济阳县| 泸西县| 吉隆县| 得荣县| 焉耆| 高雄县| 治县。| 静宁县| 文登市| 乌鲁木齐市| 长泰县| 桂东县| 广宁县| 奎屯市| 新竹县| 乌鲁木齐市| 尉氏县| 钟祥市| 通州市| 汤原县| 肃南| 玉树县| 承德县| 炉霍县| 济源市| 滨海县| 肃南| 周宁县| 易门县| 盐边县| 固阳县| 万宁市| 乡宁县| 镇平县| 弥渡县| 同仁县| 陈巴尔虎旗| 布拖县| 理塘县| 重庆市|