📄 dontcachefilter.java
字号:
package rabbit.filter;import java.nio.channels.SocketChannel;import java.util.regex.Pattern;import java.util.regex.Matcher;import rabbit.http.HttpHeader;import rabbit.proxy.Connection;import rabbit.util.Logger;import rabbit.util.SProperties;import rabbit.util.PatternHelper;/** This is a class that makes sure the proxy doesnt caches certain pages. * It features two types of filtering: either on the URL or the mime type. * * <p><font size=+1><b>URL based matching.</b></font><br> * It uses the config option <tt>dontCacheURLmatching</tt> with a default * value of the empty string. This value is a regex.<br> * This method should be used on requests, that is append this class to * <tt>httpinfilters</tt> in <tt>rabbit.conf</tt> to use URL matching. * </p> * <p><font size=+1><b>Mime type based matching.</b></font><br> * It uses the config option <tt>dontCacheMimematching</tt> with a * default value of the empty string. This value is a regexp.<br> * This method should be used on responses, that is append this class to * <tt>httpoutfilters</tt> in <tt>rabbit.conf</tt> to use mime type matching. * </p> * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */public class DontCacheFilter implements HttpFilter { private Pattern dontCacheUrls; private Pattern onlyCacheUrls; private Pattern dontCacheMime; private Pattern onlyCacheMime; /** Create a new DontCacheFilter. */ public DontCacheFilter () { } /** Test if a socket/header combination is valid or return a new HttpHeader. * If the request matches a certain criteria dont cache it. This filter is * good for pages that done send cache-control headers correctly. * This method uses the URL of the request to determine if the resource * may be cached. * @param socket the SocketChannel that made the request. * @param header the actual request made. * @param con the Connection handling the request. * @return This method always returns null. */ public HttpHeader doHttpInFiltering (SocketChannel socket, HttpHeader header, Connection con) { String uri = header.getRequestURI (); dontCache (con, dontCacheUrls, uri); onlyCache (con, onlyCacheUrls, uri); return null; } /** Test if a socket/header combination is valid or return a new HttpHeader. * If the request matches a certain criteria dont cache it. This filter is * good for pages that done send cache-control headers correctly. * This method uses the mime type of the response to determine if the * resource may be cached. * @param socket the SocketChannel that made the request. * @param header the actual request made. * @param con the Connection handling the request. * @return null */ public HttpHeader doHttpOutFiltering (SocketChannel socket, HttpHeader header, Connection con) { String mimetype = header.getHeader ("content-type"); if (mimetype == null) return null; dontCache (con, dontCacheMime, mimetype); onlyCache (con, onlyCacheMime, mimetype); return null; } /** If the string toCheck match the given pattern, * then do not cache this resource. * @param con the Connection handling the request. * @param pat the pattern to use for finding. * @param toCheck the String to check. */ private void dontCache (Connection con, Pattern pat, String toCheck) { if (pat == null) return; Matcher m = pat.matcher (toCheck); if (m.find ()) con.setMayCache (false); } /** if the string toCheck match the given pattern * then cacheing of this resource is allowed. * @param con the Connection handling the request. * @param pat the pattern we are looking for. * @param toCheck the String to check. */ private void onlyCache (Connection con, Pattern pat, String toCheck) { if (pat == null) return; Matcher m = pat.matcher (toCheck); if (m.find ()) return; con.setMayCache (false); } /** Setup this class with the given properties. * @param logger the Logger for errors/warnings * @param properties the new configuration of this class. */ public void setup (Logger logger, SProperties properties) { PatternHelper ph = new PatternHelper (); dontCacheUrls = ph.getPattern (properties, "dontCacheURLmatching", "DontCacheFilter bad url match: ", logger); onlyCacheUrls = ph.getPattern (properties, "onlyCacheURLmatching", "DontCacheFilter bad url match: ", logger); dontCacheMime = ph.getPattern (properties, "dontCacheMimematching", "DontCacheFilter bad mime match: ", logger); onlyCacheMime = ph.getPattern (properties, "onlyCacheMimematching", "DontCacheFilter bad mime match: ", logger); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -