문제

여기 스프링 프레임 워크를 사용하여 ...

CSS 파일의 응답 본문을 변경하고 URL을 직접 실행하는 경우 필터를 만들었습니다. 그러나 URLRewRite 규칙이 일치하는 경우 필터가 건너 뜁니다.

예 : web.xml :

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <!-- skipping init params here for brevity -->
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>cssFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
    <filter-mapping>
    <filter-name>cssFilter</filter-name>
    <url-pattern>*css</url-pattern>
</filter-mapping>
.

urlrewrite.xml에서 다음과 같이 매핑이 있습니다.

<rule>
    <from>/styles-special/(.*)$</from>
    <to last="true">/styles/$1</to>
</rule>
.

(많은 이유로이 필요)

그래서 경로가 시작하는 모든 * .css 파일이 "/ styles / special /"를 시작하고 cssfilter가 호출되지 않고 경로가 시작하는 * .css 파일을 호출하지 않습니다. / "/ styles /"는 예상대로 CSSFilter를 통해 실행됩니다.

CSSFilter의 URL 패턴을 여러 가지 옵션으로 변경했지만 동일한 결과를 시도했습니다. Tuckey Urlrewrite 필터가 다시 쓰는 후에 chain.dofilter ()를 호출하지 않지만, 그보다 더 복잡 할 수도 있습니다.

문제가 무엇이 여기에 있을지도 모릅니다. 이 예상 기능이 있습니까? 모든 해결 방법? ... 아마도 인터셉터 또는 컨트롤러가 여기에가는 길입니다.

이에 대한 조언을 사전에 감사드립니다 !!


참고 : 다음을 사용하여 (axtavt에서 제안한대로)

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
.

W / CHAINE 문제와 필터가 실행되는 문제를 수정합니다. 그러나 다음 오류가 발생합니다.

java.lang.IllegalStateException: NO CONTENT
at org.mortbay.jetty.HttpGenerator.addContent(HttpGenerator.java:106)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:644)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:579)
.

여기서 필터에서 코드 스 니펫 :

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse) response;

    OutputStream out = httpResponse.getOutputStream();
    GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse);

    chain.doFilter(request, wrapper);

    if(log.isDebugEnabled()) log.debug("doFilter: chain");

    String respBody = new String(wrapper.getData()); // this throws error
...
.

도움이 되었습니까?

해결책

When Tuckey UrlRewrite Filter rewrites a URL, it forwards request to the new URL instead of passing it down the filter chain. By default filters are not applied to the forwarded requests, so you need to configure it:

<filter-mapping>
     <filter-name>cssFilter</filter-name>
     <url-pattern>*css</url-pattern>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>FORWARD</dispatcher>
</filter-mapping>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top