2016-01-30 17 views
11

Tôi đang cố gắng thêm các tiêu đề Bộ nhớ Cache-Kiểm soát vào các câu trả lời được tạo trong JBoss 7 bằng khung RESTEasy. Tuy nhiên, tất cả các câu trả lời cuối cùng nhận được nhiều tiêu đề Cache-Control do JBoss thêm tiêu đề no-cache theo mặc định.JBoss7 thiết lập Cache-Control, Pragma thành không có bộ nhớ cache cho tất cả các phản hồi từ RESTEasy

Tôi không thể tìm thấy bất kỳ cài đặt nào để xóa và thêm thiết bị chặn cũng không hoạt động vì tiêu đề không có bộ nhớ cache được thêm vào sau.

Ai đó có thể cho tôi biết cách vô hiệu hóa tiêu đề pragma và bộ nhớ cache kiểm soát mặc định trong JBoss 7 không?

Lưu ý: Tôi đang sử dụng thư giãn với EJB không quốc tịch.

@Path("/api") 
@Local 
public interface UCSRestServiceInterface 
{ 
    @GET 
    @Path("/token") 
    @Produces("application/json") 
    @Cache(maxAge = 3600, noTransform = true) 
    public Response getToken(); 
} 

Lấy tiêu đề phản ứng như,

{ 
    "pragma": "No-cache", 
    "date": "Thu, 11 Feb 2016 20:16:30 GMT", 
    "content-encoding": "gzip", 
    "server": "Apache-Coyote/1.1", 
    "x-frame-options": "SAMEORIGIN", 
    "vary": "Accept-Encoding,User-Agent", 
    "content-type": "application/json", 
    "cache-control": "no-cache, no-transform, max-age=3600", 
    "transfer-encoding": "chunked", 
    "connection": "Keep-Alive", 
    "keep-alive": "timeout=15, max=100", 
    "expires": "Wed, 31 Dec 1969 19:00:00 EST" 
} 
+0

Viết bộ lọc. Nhận phản hồi; và thao tác các tiêu đề bạn muốn. – Abhin

+0

@Light Bạn có thể chi tiết một chút, làm cho nó một câu trả lời và ghi điểm một bounty =) –

+0

Tôi có cùng một vấn đề với wildfly 10 (và nó cũng có vẻ giống như trong wildfly 8), nơi luôn luôn có những món quà sau đây trong tiêu đề phản hồi: "Cache-Control: no-cache, no-store, must-revalidate". Thêm chú thích @Cache chỉ thêm trường tiêu đề thứ hai. Đây không phải là hành vi đúng! Bạn có tìm thấy giải pháp cho vấn đề này không? –

Trả lời

1

Một nguồn Lọc trong một ứng dụng web cơ bản cho phép bạn yêu cầu đánh chặn và phản ứng và được thiết kế chủ yếu cho một số trường hợp sử dụng mà làm việc bằng cách thay đổi yêu cầu/tiêu đề phản ứng . Chi tiết khác here

Vì bạn đang sử dụng RESTEasy, bạn có thể sử dụng ContainerResponseFilter; giao diện bộ lọc được cung cấp bởi JAX-RS. Bạn có thể viết bộ lọc tùy chỉnh của mình bằng cách triển khai giao diện này. Lớp lọc (thêm một mã nguồn ứng dụng web của bạn) sẽ giống như dưới đây: -

@Provider 
public class YourCustomFilter implements ContainerResponseFilter{ 

// you can check the actual string value by using method "getStringHeaders" on 'resp' below 
private static final String CACHE_CONTROL = "cache-control"; 

@Override 
public void filter(ContainerRequestContext req, 
     ContainerResponseContext resp) throws IOException { 

    if(resp.getHeaders().containsKey(CACHE_CONTROL)){ 
     resp.getHeaders().remove(CACHE_CONTROL); 
     resp.getHeaders().add(CACHE_CONTROL, "no-transform, max-age=3600"); 
    } 
    resp.getHeaders().add(CACHE_CONTROL, "no-transform, max-age=3600"); 

    } 

} 

Ở đây bạn về cơ bản kiểm tra sự prescense header Cache-Control và nếu loại bỏ hiện tại một hiện có và thêm một trong các chiến sở hữu. Xin đừng quên chú thích @Provider cần thiết bởi thời gian chạy rs jax để khám phá bộ lọc tùy chỉnh của bạn.

Lưu ý rằng với bộ lọc này, tất cả yêu cầu đối với ứng dụng web của bạn sẽ bị chặn. Nếu bạn muốn một tài nguyên hoặc phương pháp tài nguyên nhất định bị chặn, bạn có thể khám phá việc sử dụng @NameBinding

Hãy cho tôi biết nếu phương thức đó hoạt động.

+0

Xin lỗi. Nhưng việc thêm bộ lọc cũng không giải quyết được vấn đề. Tiêu đề duy nhất được tìm thấy bởi bộ lọc là kiểu nội dung cho biết JBOSS đang thêm tiêu đề Pragma + Cache-Control sau khi bộ lọc phản hồi được xử lý. – Gary

+1

Có vẻ như có giải pháp tại https://access.redhat.com/solutions/28847 nhưng tôi không có đăng ký trả phí để xem nó. – Gary

+0

Xin lỗi. Đã xa SO trong vài ngày. Bạn có thể thử hai thứ: - 1) Thử thêm chú thích @BindingPriority (0) vào Bộ lọc của bạn. 2) Điều hướng đến tệp server.xml của bạn được tìm thấy trong Abhin

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