private HandlerConfig [] handlerConfigs; private int firstElement = -1; private String doRegex; /** * 这个方法是核心方法,它根据正则表达式来决定哪些filter需要被执行,哪些filter不需要被执行 */ public void executeHandler() { if (handlerConfigs == null) { // 调用业务方法 return; }
++firstElement; if (firstElement < handlerConfigs.length) { if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) { handlerConfigs[firstElement].getHandler().executeHandler(this); } else { this.executeHandler(); } } }
private HandlerConfig [] handlerConfigs; private int firstElement = -1; private String doRegex; /** * 这个方法是核心方法,它根据正则表达式来决定哪些filter需要被执行,哪些filter不需要被执行 */ public void executeHandler() { if (handlerConfigs == null) { // 调用业务方法 return; }
++firstElement; if (firstElement < handlerConfigs.length) { if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) { handlerConfigs[firstElement].getHandler().executeHandler(this); } else { this.executeHandler(); } } }
firstElement += 1; for (; firstElement < handlerConfigs.length ; firstElement++) { if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) { handlerConfigs[firstElement].getHandler().executeHandler(this); return; } }
public class AuthTestHandler implements Handler {
public void executeHandler(HandlerChain handlerChain){ System.out.println("1----------check the user in this filter!"); handlerChain.executeHandler(); System.out.println("2----------check the user in this filter!"); } }
public class AuthTestHandler implements Handler {
public void executeHandler(HandlerChain handlerChain){ System.out.println("1----------check the user in this filter!"); handlerChain.executeHandler(); System.out.println("2----------check the user in this filter!"); } }
public class HandlerConfig { private Handler handler; private String handlerName; private String regex; private Pattern pattern; //省略getter和setter方法 }
public static void main(String[] args) {
HandlerConfig [] configs = new HandlerConfig[]{ new HandlerConfig(), new HandlerConfig(), new HandlerConfig() }; configs[0].setHandler(new AuthTestHandler()); configs[0].setHandlerName("authFilter"); configs[0].setRegex("\\d*");