1 package io.undertow.server.handlers;
2
3 import java.util.Collections;
4 import java.util.Map;
5 import java.util.Set;
6
7 import io.undertow.server.HandlerWrapper;
8 import io.undertow.server.HttpHandler;
9 import io.undertow.server.HttpServerExchange;
10 import io.undertow.server.handlers.builder.HandlerBuilder;
11 import io.undertow.util.Headers;
12
13 /**
14  *
15  * Handler that disables response caching by browsers and proxies.
16  *
17  *
18  * @author Stuart Douglas
19  */

20 public class DisableCacheHandler implements HttpHandler {
21
22     private final HttpHandler next;
23
24     public DisableCacheHandler(HttpHandler next) {
25         this.next = next;
26     }
27
28     @Override
29     public void handleRequest(HttpServerExchange exchange) throws Exception {
30         exchange.getResponseHeaders().add(Headers.CACHE_CONTROL, "no-cache, no-store, must-revalidate");
31         exchange.getResponseHeaders().add(Headers.PRAGMA, "no-cache");
32         exchange.getResponseHeaders().add(Headers.EXPIRES, "0");
33         next.handleRequest(exchange);
34     }
35
36     public static class Builder implements HandlerBuilder {
37
38         @Override
39         public String name() {
40             return "disable-cache";
41         }
42
43         @Override
44         public Map<String, Class<?>> parameters() {
45             return Collections.emptyMap();
46         }
47
48         @Override
49         public Set<String> requiredParameters() {
50             return Collections.emptySet();
51         }
52
53         @Override
54         public String defaultParameter() {
55             return null;
56         }
57
58         @Override
59         public HandlerWrapper build(Map<String, Object> config) {
60             return new Wrapper();
61         }
62
63     }
64
65     private static class Wrapper implements HandlerWrapper {
66         @Override
67         public HttpHandler wrap(HttpHandler handler) {
68             return new DisableCacheHandler(handler);
69         }
70     }
71 }
72