Package br.com.caelum.vraptor.security.produces

Source Code of br.com.caelum.vraptor.security.produces.SecurityFacade

package br.com.caelum.vraptor.security.produces;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import javax.annotation.PostConstruct;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Singleton;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationListener;
import org.apache.shiro.authc.credential.DefaultPasswordService;
import org.apache.shiro.authc.credential.PasswordService;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.caelum.vraptor.security.strategy.ShiroInitConfigStrategy;

@Singleton
public class SecurityFacade {

  @Inject @Any private Instance<AuthenticationListener> authenticationListeners;
  @Inject @Any private Instance<SessionListener> sessionListeners;
  @Inject private Instance<ShiroInitConfigStrategy> shiroInitConfigStrategy;
  @Inject private Realm realm;

  private static final Logger log = LoggerFactory.getLogger(SecurityFacade.class);

  @PostConstruct
  public void init() {
    log.info("Initializing Shiro SecurityManager");

    ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
    authenticator.setAuthenticationListeners(toCollection(authenticationListeners));
    authenticator.setRealms(Arrays.asList(realm));
   
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
    sessionManager.setSessionListeners(toCollection(sessionListeners));

    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(Arrays.asList(realm));
    securityManager.setAuthenticator(authenticator);
    securityManager.setSessionManager(sessionManager);

    if (!shiroInitConfigStrategy.isUnsatisfied()) {
      shiroInitConfigStrategy.get().init(securityManager, (AuthorizingRealm)realm);
    }
   
    SecurityUtils.setSecurityManager(securityManager);
  }

  private <E> Collection<E> toCollection(Iterable<E> iterable) {
    Collection<E> list = new ArrayList<E>();
    for (E item : iterable) {
        list.add(item);
    }
    return list;
  }

  @Produces
  public SecurityManager getSecurityManager() {
    return SecurityUtils.getSecurityManager();
  }

  @Produces
  public Subject getSubject() {
    return SecurityUtils.getSubject();
  }

  @Produces
  public Session getSession() {
    return SecurityUtils.getSubject().getSession();
  }

  @Produces
  public PasswordService getPasswordService() {
    return new DefaultPasswordService();
  }
}
TOP

Related Classes of br.com.caelum.vraptor.security.produces.SecurityFacade

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.