스프링mvc 차단기 정적 자원 차단

4295 단어 spring가로막다
springmvc 차단기 인터셉터
springmvc 차단기는 요청한 자원 경로를 차단할 수 있어 차단기의 쓰기를 크게 간소화할 수 있습니다.그러나 제발 주의해야 할 것은 정적 자원의 방출이다.
위 코드:

<mvc:resources mapping="/resources/**" location="/static/resources" /> 
  <mvc:resources mapping="/static/css/**" location="/static/css/" /> 
  <mvc:resources mapping="/static/images/**" location="/static/images/" /> 
  <mvc:resources mapping="/static/js/**" location="/static/js/" /> 

<mvc:interceptors> 
    <!--  bean Interceptor, mvc:interceptors Interceptor   
    <bean class="com.myTree.interceptor.LoginInterceptor" />--> 
    <mvc:interceptor> 
      <mvc:mapping path="/**" /> 
      <!--   -->  
      <mvc:exclude-mapping path="/Login"/>  
      <mvc:exclude-mapping path="/login"/>  
      <mvc:exclude-mapping path="/sattic/**"/>  
      <!--  mvc:interceptor  --> 
      <beans:bean class="com.myTree.interceptor.LoginInterceptor" > 
      </beans:bean> 
    </mvc:interceptor> 
  </mvc:interceptors> 
문제가 생겼습니다. jsp 페이지를 요청할 때 정적 자원에 대한 접근은 사용자 정의 차단기에 의해 차단됩니다. 이로 인해 프로그램 운행의 효율이 크게 떨어지고 차단기의 논리로 끊임없이 넘어갈 수 있습니다.주요 원인은

<mvc:mapping path="/**" /> 
모든 요청 자원을 차단합니다. 정적 자원은 배제되었지만 차단됩니다.
어떻게 이 버그를 해결합니까?
주로 세 가지 방법이 있다.
1. 요청한 URL 주소를 수정합니다.
요청한 URL 주소가 *이면do가 끝나면 차단기의 설정은 do로 끝나는 자원을 차단하는 것으로 바뀌고 정적 자원은 자연히 차단되지 않는다.
2. 사용자 정의 차단기에서 자원을 판단하고 배제해야 할 자원을 만족시키면 실행한다.

<!--   -->  
  <mvc:interceptors>  
   <!-- session  -->  
   <mvc:interceptor>  
    <mvc:mapping path="/*/*"/>  
    <bean class="com.myTree.interceptor.LoginInterceptor">  
     <property name="allowUrls">  
      <list>  
       <!--  ,  -->  
       <value>/login</value>  
       <value>/js</value>  
       <value>/css</value>  
       <value>/image</value>  
       <value>/images</value>  
      </list>  
     </property>  
    </bean>  
   </mvc:interceptor>  
  </mvc:interceptors>  
차단기에서 차단되지 않는 속성을 설정합니다.

/** 
 *   
 */  
public class LoginInterceptor implements HandlerInterceptor{  
    
  public String[] allowUrls;// ,   
    
  public void setAllowUrls(String[] allowUrls) {  
    this.allowUrls = allowUrls;  
  }  
  
  @Override  
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
      Object handler) throws Exception {<pre name="code" class="java"> <span style="white-space:pre"> </span>String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");   
    System.out.println(requestUrl);  
    if(null != allowUrls && allowUrls.length>=1){  
      for(String url : allowUrls) {   
        if(requestUrl.contains(url)) {   
          return true;   
        }   
      } 
} 

3. 웹을 설정합니다.xml의 기본 차단기, 정적 자원 차단 안 함
springmvc의 Dispatcher에서 를 설정합니다. (일반 웹 응용 서버의 기본 Servlet 이름은'default'이기 때문에 Tomcat의 defaultServlet을 활성화하여 정적 파일을 처리하고 웹.xml에서 다음 코드를 설정하면 됩니다.)

<!-- servlet tomcat,jetty , / /static/ , http://localhost/foo.css, http://localhost/static/foo.css -->  
<!--   -->  
<servlet-mapping>  
  <servlet-name>default</servlet-name>  
  <url-pattern>/js/*</url-pattern>  
  <url-pattern>/css/*</url-pattern>  
  <url-pattern>/images/*</url-pattern>  
  <url-pattern>/fonts/*</url-pattern>  
</servlet-mapping>  
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기