در حقیقت مفهوم filter chain برای Spring Security نیست و از استاندارد servlet در Java EE آمده است و Spring Security هم بدون تغییر از همان مفهوم استفاده کرده است. ایده filter chain بسیار جالب است، یک برنامه تحت وب بصورت کلی وظیفه ای جز گرفتن یک درخواست و ایجاد یک پاسخ ندارد، حالا طبق تصویز زیر مفهوم filter بین فرآیند رسیدن درخواست برای رسیدگی و تولید جواب قرار میگیرند و می توانند کارهای کلی و تکراری که لازم است برای هر درخواست و پاسخ انجام شود مثل کنترل های امنیتی یا لاگ کردن اطلاعات و ... را بر عهده میگیرند. مفهوم filter chain به ما کمک می کند براحتی فیلتر های مختلف را به هم وصل کنیم و هر وقت هم که خواستیم ترتیب اجرای آنها را عوض کنیم.
Spring Security امنیت برنامه های تحت وب را با مفهوم filter پیاده سازی کرده است و بصورت پیشفرض چند فیلتر خاص برای این منظور پیاده سازی کرده است و با آنها نیازمندی های مربوط به امنیت برنامه های تحت وب Spring را تامین می کند. حالا ممکن هست که شما برای یک نیازمندی امنیتی خاص لازم باشد یک فیلتر خاص پیاده سازی کنید (برای مثال چک کردن یک http header خاص در زمان دریافت درخواست) و سپس با استفاده از filter chain بدون اطلاع از اینکه قیلتر بعدی چه فیلتری است کنترل برنامه را به اجرای فیلتر بعدی تغییر دهید.
public class CheckHeaderFilter extends GenericFilterBean {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
//your code
filterChain.doFilter(request, response);
}
}
البته در نهایت باید فیلتر خود را در Security Config پروژه رجیستر کنید.