Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2014 Red Hat, Inc., and individual contributors
   * as indicated by the @author tags.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 
 package io.undertow.server.handlers;
 
 
 import java.util.List;
Handler that can accept or reject a request based on an attribute of the remote peer todo: should we support non-regex values for performance reasons?

Author(s):
Stuart Douglas
Andre Dietisheim
 
 public class AccessControlListHandler implements HttpHandler {
 
     private volatile HttpHandler next;
     private volatile boolean defaultAllow = false;
     private final ExchangeAttribute attribute;
     private final List<AclMatchacl = new CopyOnWriteArrayList<>();
 
     public AccessControlListHandler(final HttpHandler nextExchangeAttribute attribute) {
         this. = next;
         this. = attribute;
     }
 
     public AccessControlListHandler(ExchangeAttribute attribute) {
         this. = attribute;
         this. = .;
     }
 
     @Override
     public void handleRequest(final HttpServerExchange exchangethrows Exception {
         String attribute = this..readAttribute(exchange);
         if (isAllowed(attribute)) {
             .handleRequest(exchange);
         } else {
             exchange.setResponseCode(.);
             exchange.endExchange();
         }
     }
 
     //package private for unit tests
     boolean isAllowed(String attribute) {
         if (attribute != null) {
             for (AclMatch rule : ) {
                 if (rule.matches(attribute)) {
                     return !rule.isDeny();
                 }
             }
         }
         return ;
     }
 
     public boolean isDefaultAllow() {
         return ;
     }
 
     public AccessControlListHandler setDefaultAllow(final boolean defaultAllow) {
         this. = defaultAllow;
         return this;
     }
 
     public HttpHandler getNext() {
         return ;
     }
 
     public AccessControlListHandler setNext(final HttpHandler next) {
         this. = next;
         return this;
     }

    
Adds an allowed user agent peer to the ACL list

User agent may be given as regex

Parameters:
pattern The pattern to add to the ACL
    public AccessControlListHandler addAllow(final String pattern) {
        return addRule(patternfalse);
    }

    
Adds an denied user agent to the ACL list

User agent may be given as regex

Parameters:
pattern The user agent to add to the ACL
    public AccessControlListHandler addDeny(final String pattern) {
        return addRule(patterntrue);
    }
        this..clear();
        return this;
    }
    private AccessControlListHandler addRule(final String userAgentfinal boolean deny) {
        this..add(new AclMatch(denyuserAgent));
        return this;
    }
    static class AclMatch {
        private final boolean deny;
        private final Pattern pattern;
        protected AclMatch(final boolean denyfinal String pattern) {
            this. = deny;
            this. = createPattern(pattern);
        }
        private Pattern createPattern(final String pattern) {
            try {
                return Pattern.compile(pattern);
            } catch (PatternSyntaxException e) {
                throw ..notAValidRegularExpressionPattern(pattern);
            }
        }
        boolean matches(final String attribute) {
            return .matcher(attribute).matches();
        }
        boolean isDeny() {
            return ;
        }
        @Override
        public String toString() {
            return getClass().getSimpleName()
                    + "{"
                    + "deny=" + 
                    + ", pattern='" +  + '\''
                    + '}';
        }
    }
New to GrepCode? Check out our FAQ X