2011-12-28 33 views
22

Tôi đã viết một bộ lọc cần được gọi mỗi lần url trên trang web của tôi được truy cập XIN các tệp CSS, JS và IMAGE. Vì vậy, trong định nghĩa của tôi, tôi muốn có một cái gì đó như:Trong trình kết hợp mẫu url web.xml có cách nào để loại trừ URL không?

<filter-mapping> 
    <filter-name>myAuthorizationFilter</filter-name> 
    <url-pattern>NOT /css && NOT /js && NOT /images</url-pattern> 
</filter-mapping> 

Có cách nào để thực hiện việc này không? Các tài liệu duy nhất mà tôi có thể tìm thấy chỉ có/*

UPDATE:

tôi đã kết thúc bằng một cái gì đó tương tự như một câu trả lời được cung cấp bởi Mr.J4mes:

private static Pattern excludeUrls = Pattern.compile("^.*/(css|js|images)/.*$", Pattern.CASE_INSENSITIVE); 
    private boolean isWorthyRequest(HttpServletRequest request) { 
     String url = request.getRequestURI().toString(); 
     Matcher m = excludeUrls.matcher(url); 

     return (!m.matches()); 
    } 
+1

Bản sao có thể có của [Tôi có thể loại trừ một số url cụ thể từ bên trong ?] (Http://stackoverflow.com/questions/3125296/can-i-exclude-some-concrete-urls-from- url-pattern-inside-filter-mapping) –

Trả lời

21

Tôi nghĩ rằng bạn có thể thử này một:

@WebFilter(filterName = "myFilter", urlPatterns = {"*.xhtml"}) 
public class MyFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws IOException, ServletException { 
     String path = ((HttpServletRequest) request).getServletPath(); 

     if (excludeFromFilter(path)) chain.doFilter(request, response); 
     else // do something 
    } 

    private boolean excludeFromFilter(String path) { 
     if (path.startsWith("/javax.faces.resource")) return true; // add more page to exclude here 
     else return false; 
    } 
} 
+0

ở đâu là @WebFilter từ đâu? Tôi hiện đang sử dụng spring-mvc và tôi định nghĩa bộ lọc của mình bằng cách sử dụng @Service (value = "myAuthorizationFilter") – kasdega

+0

Tôi nghĩ rằng đây là một chú thích JavaEE bình thường. Kiểm tra [ở đây] (http://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebFilter.html) –

+0

Tôi đã làm một cái gì đó rất giống với điều này nhưng tôi đã sử dụng regex với Pattern và Matcher . Như thế này: 'private static Pattern excludeUrls = Pattern.compile (" ^. */(Css | js | images | ckeditor) /.*$ ", Pattern.CASE_INSENSITIVE);' – kasdega

5

Ánh xạ mẫu URL không hỗ trợ loại trừ. Đây là một hạn chế của đặc tả Servlet. Bạn có thể thử cách giải quyết thủ công do Mr.J4mes đăng.

1

Có lẽ bạn có thể khai báo một bộ lọc "trống" khác cho css, js v.v ... và đặt nó trước khi những người khác lọc ánh xạ.

0

Tôi đã sử dụng hạn chế bảo mật để kiểm soát truy cập. Xem mã:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Unsecured resources</web-resource-name> 
     <url-pattern>/resources/*</url-pattern> 
     <url-pattern>/javax.faces.resource/*</url-pattern> 
    </web-resource-collection> 
</security-constraint> 

Tôi làm theo hướng dẫn this.

Các vấn đề liên quan