⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dontcachefilter.java

📁 一款Java实现的HTTP代理服务器
💻 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 + -