聲明: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及後續版本。