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

📄 accessfilter.java

📁 一款Java实现的HTTP代理服务器
💻 JAVA
字号:
package rabbit.filter;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.LineNumberReader;import java.io.PrintWriter;import java.io.Reader;import java.io.Writer;import java.net.InetAddress;import java.net.UnknownHostException;import java.nio.channels.SocketChannel;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;import rabbit.util.IPAccess;import rabbit.util.Logger;import rabbit.util.SProperties;/** This is a class that filters access based on ip adress. * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */public class AccessFilter implements IPAccessFilter {    private String accessfile;    private List<IPAccess> iplist = new ArrayList<IPAccess> ();    private static final String DEFAULTCONFIG = "conf/access";    /** Filter based on a socket.     * @param s the SocketChannel to check.     * @return true if the Socket should be allowed, false otherwise.     */    public boolean doIPFiltering (SocketChannel s) {	for (IPAccess ipa : iplist)	    if (ipa.inrange (s.socket ().getInetAddress ()))		return true;	return false;    }        /** Setup this class.     * @param properties the Properties to get the settings from.     */    public void setup (Logger logger, SProperties properties) {	String file = properties.getProperty ("accessfile", DEFAULTCONFIG);	loadAccess (logger, file);    }         /** Read the data (accesslists) from a file.     * @param filename the name of the file to read from.     */    private void loadAccess (Logger logger, String filename) {	filename = filename.replace ('/', File.separatorChar);	accessfile = filename;		FileReader fr = null;	try {	    fr = new FileReader (accessfile);	    loadAccess (logger, fr);	    	} catch (IOException e) {	    logger.logFatal ("Accessfile '" + accessfile + 			     "' not found: no one allowed: " + e);	} finally {	    if (fr != null) {		try {		    fr.close ();		} catch (IOException e) {		    logger.logFatal ("failed to close accessfile: " + e);		}	    }	}    }        /** Loads in the accessess allowed from the given Reader     * @param r the Reader were data is available     */    public void loadAccess (Logger logger, Reader r) throws IOException {	List<IPAccess> iplist = new ArrayList<IPAccess> ();	LineNumberReader br = new LineNumberReader (r);	String line = null;	while ((line = br.readLine ()) != null) {	    // remove comments....	    int index = line.indexOf ('#');	    if (index >= 0) 		line = line.substring (0,index);	    if (line.equals (""))		continue;	    StringTokenizer st = new StringTokenizer (line);	    if (st.countTokens () != 2) {		logger.logWarn ("Bad line in accessconf:" + br.getLineNumber());		continue;	    }	    String low = st.nextToken ();	    InetAddress lowip = null;	    try {		lowip = InetAddress.getByName (low);	    	    } catch (UnknownHostException e) {		logger.logWarn ("Bad host: " + low + " at line:" + 				br.getLineNumber());		continue;	    	    }	    	    String high = st.nextToken ();	    InetAddress highip = null;	    try {		highip = InetAddress.getByName (high);	    } catch (UnknownHostException e) {		logger.logWarn ("Bad host: " + high + " at line:" + 				br.getLineNumber());		continue;	    	    }	    	    if (lowip != null && highip != null) 		iplist.add (new IPAccess (lowip, highip));	}	br.close ();	this.iplist = iplist;    }    /** Saves the accesslist from the given Reader.     * @param r the Reader with the users.     */    public void saveAccess (Logger logger, Reader r) throws IOException {	if (accessfile == null) 	    return;	BufferedReader br = new BufferedReader (r);	PrintWriter fw = new PrintWriter (new FileWriter (accessfile));	String line;	while ((line = br.readLine ()) != null)	    fw.println (line);	fw.flush ();	fw.close ();	br.close ();    }    /** Get the list of ips allowed     */    public List<IPAccess> getIPList () {	return iplist;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -