socketaccesscontroller.java
来自「一款Java实现的HTTP代理服务器」· Java 代码 · 共 65 行
JAVA
65 行
package rabbit.proxy;import java.nio.channels.SocketChannel;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.StringTokenizer;import rabbit.filter.IPAccessFilter;import rabbit.util.Config;import rabbit.util.Logger;/** An access controller based on socket channels. * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */public class SocketAccessController { /** the filters, a List of classes (in given order) */ private List<IPAccessFilter> accessfilters = new ArrayList<IPAccessFilter> (); public SocketAccessController (String filters, Config config, Logger logger) { accessfilters = new ArrayList<IPAccessFilter> (); loadAccessFilters (filters, accessfilters, config, logger); } private void loadAccessFilters (String filters, List<IPAccessFilter> accessfilters, Config config, Logger logger) { StringTokenizer st = new StringTokenizer (filters, ","); String classname = ""; while (st.hasMoreElements ()) { try { classname = st.nextToken ().trim (); Class<? extends IPAccessFilter> cls = Class.forName (classname).asSubclass (IPAccessFilter.class); IPAccessFilter ipf = cls.newInstance (); ipf.setup (logger, config.getProperties (classname)); accessfilters.add (ipf); } catch (ClassNotFoundException ex) { logger.logError ("Could not load class: '" + classname + "' " + ex); } catch (InstantiationException ex) { logger.logError ("Could not instansiate: '" + classname + "' " + ex); } catch (IllegalAccessException ex) { logger.logError ("Could not instansiate: '" + classname + "' " + ex); } } } public List<IPAccessFilter> getAccessFilters () { return Collections.unmodifiableList (accessfilters); } public boolean checkAccess (SocketChannel sc) { for (IPAccessFilter filter : getAccessFilters ()) { if (filter.doIPFiltering (sc)) return true; } return false; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?