This repository has been archived by the owner on Dec 26, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
CachingPreFilter.java
61 lines (50 loc) · 1.85 KB
/
CachingPreFilter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.mycompany.myapp.gateway.caching;
import com.mycompany.myapp.config.JHipsterProperties;
import com.netflix.zuul.context.RequestContext;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import static com.netflix.zuul.constants.ZuulHeaders.ACCEPT_ENCODING;
/**
* Use response in cache.
*/
public class CachingPreFilter extends CachingBaseFilter {
public CachingPreFilter(CacheManager cacheManager, JHipsterProperties jHipsterProperties) {
super(cacheManager, jHipsterProperties);
}
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 15;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest req = ctx.getRequest();
Cache cache = cache(ctx);
if (cache != null) {
String key = cacheKey(req);
Cache.ValueWrapper valueWrapper = cache.get(key);
if (valueWrapper != null) {
// TODO cache should probably not store HttpServletResponse
HttpServletResponse res = (HttpServletResponse) valueWrapper.get();
if (res != null) {
log.debug("Filling response for '{}' from '{}' cache", key, cache.getName());
ctx.setResponse(res);
ctx.set(CACHE_HIT, true);
return res;
}
}
}
ctx.set(CACHE_HIT, false);
return null;
}
private boolean isGzipRequested(RequestContext ctx) {
String requestEncoding = ctx.getRequest().getHeader(ACCEPT_ENCODING);
return requestEncoding != null && requestEncoding.equals("gzip");
}
}