Ir para o conteúdo

Provider Java - Anotações

Os projetos autoriza-java-provider-anotacoes e autoriza-java-provider-anotacoes-javaee possuem anotações para interceptar métodos e verificar se o usuário possui determinado perfil ou transação. O primeiro utiliza AspectJ, e é o mais indicado para utilizar com frameworks que utilizam AspectJ, como o Spring Framework, por exemplo. O segundo utiliza anotações JavaEE, e é indicado para projetos que utilizam essa tecnologia.

Com as anotações, as políticas de acesso definidas no Autoriza não são utilizadas. Ao invés disso, é o próprio código da aplicação cliente que define as políticas.

Configuração

O projeto de filtro não precisa de variáveis de ambiente além daquelas já definidas para o provider java básico.

Utilização

Importação no pom.xml:

<dependency>
  <groupId>br.gov.serpro.autoriza</groupId>
  <artifactId>autoriza-java-provider-anotacoes</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>

ou

<dependency>
  <groupId>br.gov.serpro.autoriza</groupId>
  <artifactId>autoriza-java-provider-anotacoes-javaee</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>

Se você estiver utilizando JavaEE, é preciso declarar os interceptors no beans.xml da sua aplicação, de modo similar a:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <interceptors>
        <class>br.gov.serpro.autoriza.interceptadores.InterceptadorPerfis</class>
    </interceptors>
        <interceptors>
        <class>br.gov.serpro.autoriza.interceptadores.InterceptadorTransacoes</class>
    </interceptors>
</beans>

Adicionalmente, no caso do autoriza-java-provider-anotacoes, é preciso definir uma classe que implemente a interface br.gov.serpro.autoriza.anotacao.resolver.DadosUsuarioAnotacaoResolver, e defina os métodos:

  /**
   * Retorna o id do usuário logado (CPF)
   * 
   * @param joinPoint Join point de execução da anotação
   * 
   * @return CPF do usuário logado
   */
  String getIdUsuarioLogado(ProceedingJoinPoint joinPoint);

  /**
   * Retorna o token de acesso do Acesso GovBR para o usuário
   * 
   * @param joinPoint Join point de execução da anotação
   * 
   * @return Token de acesso do acesso gov para o usuário
   */
  String getTokenAcessoGov(ProceedingJoinPoint joinPoint);

No caso do autoriza-java-provider-anotacoes-javaee, é preciso definir uma classe que implemente a interface br.gov.serpro.autoriza.anotacao.javaee.resolver.DadosUsuarioAnotacaoResolver, e defina os métodos:

  /**
   * Retorna o id do usuário logado (CPF)
   * 
   * @return CPF do usuário logado
   */
  String getIdUsuarioLogado();

  /**
   * Retorna o token de acesso do Acesso GovBR para o usuário
   * 
   * 
   * @return Token de acesso do acesso gov para o usuário
   */
  String getTokenAcessoGov();

Essa realização da interface deve ser utilizada na classe de configuração de injeção de dependências do provider, de um modo similar a:

  @Override 
  protected void configure() {
    bind(DadosUsuarioAnotacaoResolver.class).to(DadosUsuarioAnotacaoResolverImpl.class);
    bind(CacheAutoriza.class).to(CacheAutorizaPadrao.class);
    bind(FachadaAutoriza.class).to(FachadaAutorizaRest.class);
    bind(PontoAdministracaoPoliticas.class).to(PontoAdministracaoPoliticasServico.class);
    bind(PontoInformacaoPoliticas.class).to(PontoInformacaoPoliticasPadrao.class);
    bind(PontoDecisaoPoliticas.class).to(PontoDecisaoPoliticasPadrao.class);
    bind(PontoExecucaoPoliticas.class).to(PontoExecucaoPoliticasPadrao.class);
  }

Por fim, para utilizar os interceptadores no código Java, é só decorar o método desejado com as anotações RequerPerfil ou RequerTransacao, de modo equivalente a:

@RequerPerfil(perfis={"PERFIL_A","PERFIL_B"})
public void meuMetodoASerInterceptado() {

}

@RequerTransacao(transacoes={"TRANSACAO_B","TRANSACAO_C"})
public void meuMetodoASerInterceptadoDois() {

}

Os interceptadores retornam uma exceção ExcecaoAcessoNaoAutorizado no caso do usuário não possuir acesso ao perfil ou transação.