springmvc的aop處理問題(一)request參數判斷

在每個request中,根據不同的情況,需要做一些AOP的操作。不知道雜實現,不曉得和以前寫的
aop的cache是否有類似之處呢。網上資料顯示針對controller和針對manager的aop應該是不同的,那麼就試試吧。
參考文章如下:
http://blog.arendsen.net/index.php/2006/10/31/using-spring-20-aop-to-implement-web-request-interception/

查找到,我們的springmvc裏面使用的是
org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
來處理應用,一直看它的基類是用AbstractHandlerMapping在處理,我們就是利用的立面的interceptors
這個屬性。

撰寫ValidateHandlerInterceptor集成自HandlerInterceptor,核心代碼如下:
public class ValidateHandlerInterceptor implements HandlerInterceptor {
//頁面校驗的manager
private PageInstanceManager pageInstanceManager;
//日誌
private static Log log = LogFactory
    .getLog(ValidateHandlerInterceptor.class);
//調用結束後,已經view render了之後的clean操作
public void afterCompletion(HttpServletRequest request,
    HttpServletResponse response, Object handler, Exception ex)
    throws Exception {
   log.debug("after render the view :" + new Date());
}
//方法調用時,在view render之前的調用
public void postHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler, ModelAndView view)
    throws Exception {
   String validate_rule_flag = request.getParameter("validate_rule_flag");
   log.debug("do I need to put in the validate rules: "
     + StringUtil.isNotBlank(validate_rule_flag));
   if (StringUtil.isNotBlank(validate_rule_flag)) {
    //這個是我應用中的特例,根據request過來的參數,判斷是否要加上頁面校驗的東東
    addValidateRule(request, response, view);
   }
   log.debug("invoke method,but before render view : " + new Date());
}
//方法調用前調用
public boolean preHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler) throws Exception {
   log.debug("before the handle invoke :" + new Date());
   return true;
}
...
}

在我們的xml配置文件中,spring的配置文件做如下增加:
<bean
   class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="interceptors">
   <list>
    <bean class="cn.sccl.validate.web.ValidateHandlerInterceptor" />
   </list>
</property>
</bean>
其中配置的cn.sccl.validate.web.ValidateHandlerInterceptor就是我們剛纔作爲HandlerInterceptor的類。這樣的話每個.do的request都會被我們
AOP的攔截處理,一些每個action都會考慮要添加的動作或者都需要判斷處理的動作就可以放在這裏,比filter使用得方便一些,可以得到前後request,response和
我們的spring controller的ModelAndView的各種信息。

 

轉自:http://sillycat.javaeye.com/blog/564002

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章