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.