天天看點

淺談 bboss mvc 頁面通路控制實作機制

聲明:3.6以後的bboss中已經增加了安全過濾器,不再需要這個攔截器來進行安全認證檢測

淺談 bboss mvc 頁面通路控制實作機制,本文介紹如何通過bboss mvc架構中的攔截器來實作頁面通路控制功能,内容不多,很簡單,但是很實用,呵呵。切入正題。

1.bboss mvc攔截器介紹

1.1 bboss mvc的攔截器接口為:

org.frameworkset.web.servlet.HandlerInterceptor      

1.2 bboss mvc提供了頁面通路控制的基礎抽象類,這個類實作了HandlerInterceptor接口:

org.frameworkset.web.interceptor.AuthenticateInterceptor      

AuthenticateInterceptor提供了抽象方法:

protected abstract boolean check(HttpServletRequest request,
			HttpServletResponse response, HandlerMeta handlerMeta);      

參數說明:前兩個參數是url請求提供了jsp請求對象request和請求響應對象response,第三個參數是mvc請求控制器的中繼資料資訊handlerMeta,通過這個對象使用者可以擷取到控制的相關定義資訊。

傳回值說明:傳回boolean值,如果是true表示允許通路,為false表示不允許通路。如果驗證通過時,還可以将使用者會話資訊以特定的key值對方式存儲到request的attribute中,以便控制器方法中友善地擷取使用者會話資訊;如果驗證不通過那麼則跳轉到使用者指定的頁面,同時會将使用者目前請求的頁面資訊(頁面路徑,頁面參數)轉交給失敗跳轉頁(一般是登陸頁面),當登陸通過後,任然允許使用者擷取這些資訊轉向到需要通路的頁面。

1.3 通過繼承AuthenticateInterceptor類并實作其中的抽象check方法使用者可以非常友善地實作自己的通路控制攔截器

1.4 使用者實作了自己的通路控制攔截器後,還需要在bboss-mvc.xml中配置通路控制攔截和器攔截頁面規則(可以非常友善地配置需要攔截的url請求和不需要攔截的url請求,如果不指定這些規則,就攔截所有的url請求方法,這裡的url請求指的是mvc控制url請求)。

下面舉例說明

2.實作自己的通路控制攔截器

2.1 通路控制攔截器定義

/**
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.  
 */
package org.frameworkset.web.interceptor;

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

import org.frameworkset.web.servlet.handler.HandlerMeta;



/**
 * <p>
 * MyFirstInterceptor.java
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * bboss workgroup
 * </p>
 * <p>
 * Copyright (c) 2009
 * </p>
 * 
 * @Date 2011-5-31
 * @author biaoping.yin
 * @version 1.0
 */
public  class MyFirstInterceptor extends AuthenticateInterceptor{

	@Override
	protected boolean check(HttpServletRequest request,
			HttpServletResponse response, HandlerMeta handlerMeta)
	{
		String name = request.getParameter("name");
		if(name != null && name.equals("test"))
			return false;
		return true;
	}
	

}
      

這個通路控制攔截器邏輯非常簡單,直接通過name參數值來判斷頁面是否可以通路,如果name有值并且值為test那麼就阻止使用者繼續通路,否則允許使用者通路。

2.2 通路控制攔截器及攔截規則配置

bboss-mvc.xml檔案中找到如下内容(如果沒有就加進去,這裡可以配置多個全局攔截器):

<!-- 配置全局控制器方法攔截器 -->
     <property name="org.frameworkset.web.servlet.gloabel.HandlerInterceptors" >
     	<list componentType="bean">
     		...............
     	</list>
     </property>      

找到後将通路控制攔截器配置進去:

<!-- 配置全局控制器方法攔截器 -->
     <property name="org.frameworkset.web.servlet.gloabel.HandlerInterceptors" >
     	<list componentType="bean">
     		<!-- 配置認證檢查攔截器 -->
     		<property class="org.frameworkset.web.interceptor.MyFirstInterceptor">
     			<!-- 配置認證檢查攔截器攔截url模式規則 -->
     			<property name="patternsInclude">
     				<list componentType="string">
     					<property value="/**/*.do"/>
     				</list>
     			</property>
     			<!-- 配置認證檢查攔截器不攔截url模式規則 -->
     			<property name="patternsExclude">
     				<list componentType="string">
     					<property value="/*.html"/>
     				</list>
     			</property>
     			<property name="redirecturl" value="/login.jsp"/>
     		</property>
     	</list>
     </property>      

這裡需要說明一下:

patternsInclude-用來指定需要攔截的url請求規則清單,可以是通配符,也可以是具體的位址

patternsExclude-用來指定不需要攔截的url請求規則清單,可以是通配符,也可以是具體的位址

redirecturl-用來指定驗證失敗時需要跳轉的頁面,例如/login.jsp,前面帶/表示這個位址是相對于應用上下文的位址,目前請求的頁面資訊(頁面路徑,頁面參數)轉交給失敗跳轉頁(一般是登陸頁面),當登陸通過後,任然允許使用者通過擷取這些資訊轉向到需要通路的頁面(跳不跳由使用者自己決定)。

如果patternsInclude和patternsExclude都沒有指定,那麼預設攔截所有的控制方法請求。patternsExclude指定的規則優先級要高些,隻要比對上這個規則那麼頁面通通放行。

ok,就這麼簡單,呵呵,本文參考bbossgroups 3.2版本功能編寫,适用3.2及後續版本。