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.
Introdução ao Java Config para Spring Security
Um guia rápido e prático para o Java Config for Spring Security
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.
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.
Começaremos implementando oorg.springframework.web.filter.GenericFilterBean.
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:
-
addFilterBefore(filter, class) – adiciona umfilter antes da posição do filtro especificadoclass
-
addFilterAfter(filter, class) - adiciona umfilter após a posição do filtro especificadoclass
-
addFilterAt(filter, class) - adiciona umfilter na localização do filtro especificadoclass
-
addFilter(filter) - adiciona umfilter que deve ser uma instância ou estende um dos filtros fornecidos pelo Spring Security
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.