Fastjson wird verwendet, um die Konfiguration zu analysieren.
Die Codekopie lautet wie folgt:
Paket saleindbuy.freemodule.web.filter;
importieren java.io.ioException;
Import Java.io.printwriter;
Import Java.io.StringWriter;
Import Java.util.Arrays;
import Java.util.hashMap;
importieren java.util.list;
import Java.util.map;
importieren javax.servlet.filterchain;
importieren javax.servlet.servletException;
importieren javax.servlet.http.httpServletRequest;
importieren javax.servlet.http.httpServletResponse;
importieren javax.servlet.http.httpServletResponsewrapper;
Import com.alibaba.fastjson.json;
Import com.alibaba.fastjson.jsonArray;
Import com.alibaba.fastjson.jsonObject;
öffentliche Klasse Cacheresp {
private lange Wartezeit = 1000*3;
private statische Karte <String, Cacheinfo> cfgmap = new Hashmap <String, cacheresp.cacheinfo> ();
public static final String query_strings = "queryStrings";
public static final String cached_time = "CachedTime";
public static final String cache_config = "cacheconfig";
public static void config (String cfgjson) {
JsonObject CFG = JSON.ParseObject (CFGJSON);
für (map.entry <String, Objekt> Eintrag: cfg.entryset ()) {
String key = Eintrag.getKey ();
Map <string, object> value = (map <string, object> )eintrag.getValue ();
Listen queryStrings = (jsonArray) value.get (query_strings);
Integer CachedTime = (Integer) value.get (cached_time);
Cacheinfo cacheinfo = new Cacheinfo (QueryStrings, CachedTime);
cfgmap.put (Schlüssel, Cacheinfo);
}
}
Public Static Void Cacheddo (HttpServletRequest Request, HttpServletResponse -Antwort, Filterchain -Kette) löst IOException, ServleTException {
Cacheinfo cacheinfo = getCacheinfo (Anfrage);
String queryString = request.getQueryString ();
// Wenn Cacheinfo leer ist, ist kein Cache erforderlich.
if (cacheinfo! = null) {
long now = System.currentTimemillis ();
synchronisiert (cacheresp.class) {
if (now-cacheinfo.lastupdatetime> cacheinfo.cachedTime) {
System.out.println ("nicht Cache verwenden:");
Proxyresponse proxyresponse = new Proxyresponse (Antwort);
chain.dofilter (request, proxyresponse);
cacheinfo.cachemap.put (queryString, proxyresponse.getBuffer ());
cacheinfo.lastupdatetime = jetzt;
}anders {
System.out.println ("Cache verwenden");
}
}
String cachestern = cacheinfo.cachemap.get (queryString) .ToString ();
response.getWriter (). Schreiben (Cachestern);
}anders {
chain.dofilter (Anfrage, Antwort);
}
}
Private statische Cacheinfo getCacheinfo (HttpServletRequest -Anforderung) {
String key = request.getRequesturi (). Ersetzen (request.getContextPath (), "");
Cacheinfo cacheinfo = cfgmap.get (Schlüssel);
if (cacheinfo! = null &&
cacheinfo.needcache (request.getQueryString ())) {
Cacheinfo zurückgeben;
}
null zurückkehren;
}
public statische Klasse cacheinfo {
public list queryStrings = arrays.aslist (neuer String [] {"list", "index"});
öffentliche lange zwischengespeicherte Zeit = 1000;
public last lastUpdatetime = 0;
public map <string, stringBuffer> cachemap = new HashMap <String, StringBuffer> ();
public cacheinfo (listen queryStrings, Integer CachedTime) {
super();
if (CachedTime! = NULL) {
this.cachedTime = CachedTime;
}
this.queryStrings = queryStrings;
}
/**
*
* @param queryStrings Request.getQueryString
* @zurückkehren
*/
public boolean Needcache (String QueryStrings) {
If (queryStrings == null) {// Wenn QueryStrings leer ist, werden alle Abfragen standardmäßig zwischengespeichert
zurückkehren;
}
return queryStrings.contains (queryStrings);
}
}
private statische Klasse Proxyresponse erweitert HttpServletResponsewrapper {
private StringWriter sw = new StringWriter ();
// private bytearrayoutputStream baos = new bytearrayoutputStream ();
public proxyresponse (httpServletResponse -Antwort) {{
Super (Antwort);
}
@Override
Der öffentliche Pressewriter GetWriter () löst IoException {aus
Neuen Pressewriter (SW) zurückgeben;
}
public StringBuffer getBuffer () {
return sw.getBuffer ();
}
}
}