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.