Um filtro personalizado na cadeia de filtros do Spring Security

Um filtro personalizado na cadeia de filtros do Spring Security

1. Visão geral

Neste artigo rápido, vamos nos concentrar em escrever um filtro personalizado para a cadeia de filtros Spring Security.

Leitura adicional:

Spring Security - @PreFilter e @PostFilter

Aprenda a usar as anotações @PreFilter e @PostFilter Spring Security através de exemplos práticos.

Read more

Introdução ao Java Config para Spring Security

Um guia rápido e prático para o Java Config for Spring Security

Read more

Configuração Automática de Segurança de Inicialização Spring

Um guia rápido e prático para a configuração padrão do Spring Security do Spring Boot.

Read more

2. Criando o Filtro

O Spring Security fornece vários filtros por padrão e, na maioria das vezes, são suficientes.

Mas é claro que às vezes é necessário implementar uma nova funcionalidade com a criação de um novo filtro para usar na cadeia.

OGenericFilterBean é uma implementação simples de implementaçãojavax.servlet.Filter que reconhece o Spring.

Para a implementação - precisamos apenas implementar um único método:

public class CustomFilter extends GenericFilterBean {

    @Override
    public void doFilter(
      ServletRequest request,
      ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }
}

3. Usando o filtro na configuração de segurança

Somos livres para escolher a configuração XML ou a configuração Java para conectar o filtro à configuração do Spring Security.

3.1. Configuração Java

Você pode registrar o filtro substituindo programaticamente o métodoconfigure deWebSecurityConfigurerAdapter. Por exemplo, funciona com o métodoaddFilterAfter em uma instânciaHttpSecurity:

@Configuration
public class CustomWebSecurityConfigurerAdapter
  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(
          new CustomFilter(), BasicAuthenticationFilter.class);
    }
}

Existem alguns métodos possíveis:

3.2. Configuração XML

Você pode adicionar o filtro à cadeia usando a tagcustom-filter e uma dethese names para especificar a posição do seu filtro. Por exemplo, pode ser apontado pelo atributoafter:


    


Aqui estão todos os atributos para especificar exatamente um lugar em que seu filtro está na pilha:

  • after - descreve o filtro imediatamente após o qual um filtro personalizado será colocado na cadeia

  • before - define o filtro antes do qual nosso filtro deve ser colocado na cadeia

  • position - permite substituir um filtro padrão na posição explícita por um filtro personalizado

4. Conclusão

Neste artigo rápido, criamos um filtro personalizado e o conectamos na cadeia de filtros do Spring Security.

Como sempre, todos os exemplos de código estão disponíveis emsample Github project.