Package br.com.caelum.brutauth.interceptors

Source Code of br.com.caelum.brutauth.interceptors.SimpleBrutauthRuleInterceptor

package br.com.caelum.brutauth.interceptors;

import java.util.Arrays;

import br.com.caelum.brutauth.auth.annotations.AccessLevel;
import br.com.caelum.brutauth.auth.annotations.SimpleBrutauthRules;
import br.com.caelum.brutauth.auth.handlers.HandlerSearcher;
import br.com.caelum.brutauth.auth.handlers.RuleHandler;
import br.com.caelum.brutauth.auth.rules.SimpleBrutauthRule;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.Container;
import br.com.caelum.vraptor.resource.ResourceMethod;

@Intercepts
public class SimpleBrutauthRuleInterceptor implements Interceptor {
 
  private Container container;
  private final HandlerSearcher handlers;

  public SimpleBrutauthRuleInterceptor(Container container, HandlerSearcher handlers) {
    this.container = container;
    this.handlers = handlers;
  }

  @Override
  public void intercept(InterceptorStack stack, ResourceMethod method,
      Object resourceInstance) throws InterceptionException {
   
    SimpleBrutauthRules permissionAnnotation = method.getMethod().getAnnotation(SimpleBrutauthRules.class);
    Class<? extends SimpleBrutauthRule>[] permissions = permissionAnnotation.value();
    long permissionData = 0l;
    Arrays.asList(method.getMethod().getAnnotations());
    if (method.containsAnnotation(AccessLevel.class)) {
      permissionData = method.getMethod().getAnnotation(AccessLevel.class).value();
    }
    for (Class<? extends SimpleBrutauthRule> permission : permissions) {
      SimpleBrutauthRule rule = container.instanceFor(permission);
      RuleHandler handler = handlers.getHandler(rule);
      if(!rule.isAllowed(permissionData)){
        handler.handle();
        return;
      }
    }
    stack.next(method, resourceInstance);
  }

  @Override
  public boolean accepts(ResourceMethod method) {
    return method.containsAnnotation(SimpleBrutauthRules.class);
  }

}
TOP

Related Classes of br.com.caelum.brutauth.interceptors.SimpleBrutauthRuleInterceptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.