SpringMvc Interceptorブロッカーの構成と使用
10231 ワード
作者:tonytfjing+Java兔
DispatcherServlet
SpringMVCには、すべてのリクエストがDispatcherServiceletを通過する統合されたエントリDispatcherServiceletがあります.DispatcherServiceletはフロントコントローラであり、webに配置する.xmlファイルの.一致する要求をブロックして、サーブレットは一致する規則をブロックして自分で定義して、ブロックした要求を、ある規則によって目標のControllerに配布して処理します.だから私たちは今web.xmlには、次の構成が追加されています.
静的リソースはブロックされません
一般的にブロックを実装するのは、主に権限管理のためであり、主にurlリクエストをブロックするため、静的リソースをブロックしません.静的リソースをフィルタリングするにはspring-mvc.xmlプロファイルでは、次のように構成されています.
カスタムブロッキング
SpringMVCのインターセプタHandlerInterceptorAdapterは、3つのpreHandle,postHandle,afterCompletionメソッドを提供します. preHandleは、トラフィックプロセッサが要求を処理する前に呼び出される. postHandleは、トラフィックプロセッサ処理要求の実行が完了した後、ビューを生成する前に実行される. afterCompletionは、DispatcherServiceletが要求を完全に処理した後に呼び出され、リソースのクリーンアップなどに使用できます.
そのため、独自の権限管理ロジックを実現するには、HandlerInterceptorAdapterを継承し、その3つの方法を書き直す必要があります. springmvc.xmlに自己定義のブロッカーを追加する: カスタムブロッキングの具体的なコード:
これにより、簡単なカスタムブロッキングが完了します.
参考資料
http://blog.csdn.net/tonytfjing/article/details/39207551
http://blog.csdn.net/liumm0000/article/details/7565480
http://hc24.iteye.com/blog/2063660
DispatcherServlet
SpringMVCには、すべてのリクエストがDispatcherServiceletを通過する統合されたエントリDispatcherServiceletがあります.DispatcherServiceletはフロントコントローラであり、webに配置する.xmlファイルの.一致する要求をブロックして、サーブレットは一致する規則をブロックして自分で定義して、ブロックした要求を、ある規則によって目標のControllerに配布して処理します.だから私たちは今web.xmlには、次の構成が追加されています.
<servlet>
<servlet-name>demoservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:spring-mvc.xmlparam-value>
init-param>
<load-on-startup>2load-on-startup>
<async-supported>trueasync-supported>
servlet>
<servlet-mapping>
<servlet-name>demoservlet-name>
<url-pattern>*.dourl-pattern>
servlet-mapping>
静的リソースはブロックされません
一般的にブロックを実装するのは、主に権限管理のためであり、主にurlリクエストをブロックするため、静的リソースをブロックしません.静的リソースをフィルタリングするにはspring-mvc.xmlプロファイルでは、次のように構成されています.
<mvc:resources mapping="/resources/**" location="/resources/" cache-period="300" />
カスタムブロッキング
SpringMVCのインターセプタHandlerInterceptorAdapterは、3つのpreHandle,postHandle,afterCompletionメソッドを提供します.
そのため、独自の権限管理ロジックを実現するには、HandlerInterceptorAdapterを継承し、その3つの方法を書き直す必要があります.
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="com.wx.app.ygp.action.interceptor.LoginInterceptor">bean>
mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="**com.wx.app.ygp.action.interceptor.MessageInterceptor**">bean>
mvc:interceptor>
mvc:interceptors>
package com.wx.app.ygp.action.interceptor;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
/**
*
* @author huangjp
* @Descripition :
* 2017 6 22 1:11:11
*/
public class MessageInterceptor extends HandlerInterceptorAdapter{
/**
* URL
*/
private static final String[] INTERCEPTOR_URL = {
"/icCard/workCard.do?menuId=97",
"/billManagement/counterPayment/show.do?menuId=2003",
"/icCard/dailyBusiness.do?menuId=95",
"/icCard/exceptionBusiness.do?menuId=96"
};
private static final String MESSAGE_URL = "/message/show.do";
private final Logger logger = Logger.getLogger(MessageInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// url:http://localhost:8080/ygp/icCard/workCard.do
String url = request.getRequestURL().toString();
String message = request.getParameter("message");
// ,
for(String oneUrl : INTERCEPTOR_URL){
if(url.contains(oneUrl.split("[?]")[0]) && message == null){
logger.info(" ");
fowardMessage(request, response, oneUrl);
return false;
}
}
logger.info(" ");
return true;
}
/**
*
* @param : menuUrl
* @throws IOException
* @throws ServletException
*/
private void fowardMessage(HttpServletRequest request,HttpServletResponse response, String menuUrl) throws ServletException, IOException{
RequestDispatcher rd = request.getRequestDispatcher(MESSAGE_URL+"?menuUrl="+menuUrl);
rd.forward(request, response);
}
}
これにより、簡単なカスタムブロッキングが完了します.
参考資料
http://blog.csdn.net/tonytfjing/article/details/39207551
http://blog.csdn.net/liumm0000/article/details/7565480
http://hc24.iteye.com/blog/2063660