Персонализиран филтър във веригата за пролетни филтри за сигурност

1. Общ преглед

В тази бърза статия ще се съсредоточим върху писането на персонализиран филтър за филтърната верига Spring Security.

2. Създаване на филтър

Spring Security предоставя редица филтри по подразбиране и в повечето случаи те са достатъчни.

Но разбира се понякога е необходимо да се внедри нова функционалност със създаване на нов филтър, който да се използва във веригата.

Ще започнем с внедряването на org.springframework.web.filter.GenericFilterBean .

В GenericFilterBean е проста javax.servlet.Filter изпълнение изпълнение, който е наясно, Spring.

Относно изпълнението - трябва да приложим само един метод:

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

3. Използване на филтъра в Security Config

Ние сме свободни да избираме или XML конфигурация, или Java конфигурация, за да свържем филтъра в конфигурацията Spring Security.

3.1. Конфигурация на Java

Можете да регистрирате филтъра, програмно заменящ метода за конфигуриране , от WebSecurityConfigurerAdapter . Например, тя работи с addFilterAfter метода на HttpSecurity например:

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

Има няколко възможни метода:

  • addFilterBefore (filter, class) - добавя филтър преди позицията на посочения клас филтър
  • addFilterAfter (filter, class) - добавя филтър след позицията на посочения клас филтър
  • addFilterAt (filter, class) - добавя филтър в местоположението на посочения клас филтър
  • addFilter (филтър) - добавя филтър, който трябва да бъде екземпляр или да разшири един от филтрите, предоставени от Spring Security

3.2. XML конфигурация

Можете да добавите филтъра към веригата, като използвате маркера custom-filter и едно от тези имена, за да укажете позицията на вашия филтър. Например, това може да бъде посочено от атрибута after :

Ето всички атрибути, за да посочите точно мястото, което филтърът ви в стека:

  • след - описва филтъра веднага, след което във веригата ще бъде поставен персонализиран филтър
  • преди - определя филтъра, пред който нашият филтър трябва да бъде поставен във веригата
  • позиция - позволява замяна на стандартен филтър в изрично положение с персонализиран филтър

4. Заключение

В тази бърза статия създадохме персонализиран филтър и го свързахме във филтърната верига Spring Security.

Както винаги, всички примери за код са налични в примерния проект на Github.