2016-07-01 16 views
5

tôi đã xác định một vị trí cho các tập tin tĩnh trong một ứng dụng Spark:Add 'before` lọc cho các tập tin tĩnh trong SparkJava

Spark.staticFileLocation("/public") 

Bây giờ tôi muốn thêm một bộ lọc cho một số tập tin (ví dụ cho các mục đích an ninh), nhưng nó không hoạt động:

Spark.before("/admin.html", myFilter); 

Nó hoạt động, tuy nhiên, đối với ánh xạ không tĩnh. Có thể cấu hình bộ lọc này cho các tệp tĩnh không?

Nói cách khác, các phương pháp hay nhất để Spark bảo vệ các tệp tĩnh (như mẫu cho trang quản trị) bị hiển thị mà không cần xác thực là gì?

+0

Hi, cùng một câu hỏi, spark vỉa phải sử dụng serverside công cụ mẫu (như freemarker). Bạn đã giải quyết nó? – andyf

+0

Không, rất tiếc là tôi chưa giải quyết được. –

+0

Theo dõi nguồn (spark 2.5): 'spark.http.matching.MatcherFilter.doFilter', di chuyển' dòng 90' (// xử lý tài nguyên tĩnh) sang 'dòng 128' (sau BeforeFilters.execute (context);), có thể giải quyết vấn đề. (Nhưng tôi đã không thử ..., bởi vì bây giờ tôi quyết định sử dụng một động cơ mẫu: thymeleaf.) – andyf

Trả lời

6

Bạn có thể sử dụng Spark StaticFilesConfiguration, chỉ cần không sử dụng dây điện tích hợp. Spark.staticFileLocation("/public") tạo và gửi phản hồi trước khi bất kỳ bộ lọc hoặc tuyến đường nào khác được chọn. Hãy thử điều này thay vì:

package web; 

import spark.Service; 
import spark.staticfiles.StaticFilesConfiguration; 

public class ServerExample { 

    public ServerExample() { 
     Service service = Service.ignite(); 
     service.port(1234); 

     // All other filters first 
     service.before((request, response) -> { /* Authentication filter */ }); 
     service.before("/admin.html", (request, response) -> 
       service.halt(401, "Nothing to see here")); 
     service.before((request, response) -> { /* Some other filter */ }); 

     // Static files filter is LAST 
     StaticFilesConfiguration staticHandler = new StaticFilesConfiguration(); 
     staticHandler.configureExternal("/path/to/static/files/"); 
     service.before((request, response) -> 
       staticHandler.consume(request.raw(), response.raw())); 

     // All your routes (are belong to us) 
     service.get("/", (req, res) -> "Hello world"); 
     service.get("/health", (req, res) -> "Peachy"); 
    } 

    public static void main(String[] args) { 
     new ServerExample(); 
    } 
} 

dài hạn, có thể bạn muốn để phục vụ các tập tin tĩnh từ Nginx hay Apache, và nếu bạn đang thực sự thành công, một CDN :)

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