Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.ec.controller.seguranca;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;

import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.UsuarioPerfil;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.shared.SistemaAuthentication;

public class SistemaAuthenticationProvider implements AuthenticationProvider {
       
        @Autowired
        private UsuarioService usuarioService;
       
        public boolean supports(Class<? extends Object> authentication) {
                return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);
        }
       
        public Authentication authenticate(Authentication authentication) throws AuthenticationException {
                try {
                        Usuario usuario = new Usuario();
                        usuario.setLogin((String)authentication.getPrincipal());
                        usuario.setSenha((String)authentication.getCredentials());
                       
                        usuario = usuarioService.efetuarLogin(usuario);
                       
                        if (usuario == null) {
                                throw new BadCredentialsException("Usuário inválido!");
                        }
                       
                        Collection<GrantedAuthority> authorities = obterPermissoes(usuario);
                       
                        return criarAuthentication(authentication, usuario, authorities);
                } catch (Exception e) {
                        throw new BadCredentialsException(e.getMessage());
                }
        }
       
        private SistemaAuthentication criarAuthentication(Authentication sistemaAuthentication, Usuario usuario, Collection<GrantedAuthority> authorities) {
                return new SistemaAuthentication (
                                String.valueOf(sistemaAuthentication.getPrincipal()),
                                String.valueOf(sistemaAuthentication.getCredentials()),
                                usuario, authorities);
        }

        private Collection<GrantedAuthority> obterPermissoes(Usuario usuario) throws Exception {
                Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
                for (UsuarioPerfil perfil : usuario.getPerfis()) {
                        String regra = "ROLE_" + perfil.getSequencial();
                        authorities.add(new GrantedAuthorityImpl(regra));
                }
                return authorities;
        }

}