Spring Security Web module provides comprehensive web security features for Spring-based applications, including servlet-based authentication, authorization, CSRF protection, session management, and security filter chain implementation
—
The Spring Security Web filter chain infrastructure provides the foundation for all web security operations. It manages the execution of security filters in a configurable, ordered chain that processes HTTP requests.
The filter chain system is built around several key concepts:
The FilterChainProxy is the main entry point for Spring Security web filtering.
public class FilterChainProxy extends GenericFilterBean {
// Constructors
public FilterChainProxy();
public FilterChainProxy(SecurityFilterChain chain);
public FilterChainProxy(List<SecurityFilterChain> filterChains);
// Main filter method
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException;
// Configuration methods
public void setSecurityContextHolderStrategy(SecurityContextHolderStrategy securityContextHolderStrategy);
public void setFilterChainValidator(FilterChainValidator filterChainValidator);
public void setFilterChainDecorator(FilterChainDecorator filterChainDecorator);
public void setFirewall(HttpFirewall firewall);
public void setRequestRejectedHandler(RequestRejectedHandler requestRejectedHandler);
// Access methods
public List<Filter> getFilters(String url);
public List<SecurityFilterChain> getFilterChains();
}// Create multiple filter chains for different URL patterns
List<SecurityFilterChain> chains = Arrays.asList(
// API endpoints - stateless with JWT
new DefaultSecurityFilterChain(
new AntPathRequestMatcher("/api/**"),
new JwtAuthenticationFilter(),
new AuthorizationFilter()
),
// Web interface - session-based with forms
new DefaultSecurityFilterChain(
new AntPathRequestMatcher("/**"),
new SecurityContextHolderFilter(new HttpSessionSecurityContextRepository()),
new CsrfFilter(new HttpSessionCsrfTokenRepository()),
new UsernamePasswordAuthenticationFilter(),
new ExceptionTranslationFilter()
)
);
FilterChainProxy proxy = new FilterChainProxy(chains);
// Configure with custom firewall
proxy.setFirewall(new StrictHttpFirewall());
// Set custom request rejected handler
proxy.setRequestRejectedHandler(new HttpStatusRequestRejectedHandler());The SecurityFilterChain interface defines the contract for filter chains.
public interface SecurityFilterChain {
// Determines if this chain should handle the request
boolean matches(HttpServletRequest request);
// Returns the ordered list of filters to execute
List<Filter> getFilters();
}public class DefaultSecurityFilterChain implements SecurityFilterChain {
// Constructors
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, Filter... filters);
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters);
// SecurityFilterChain implementation
public boolean matches(HttpServletRequest request);
public List<Filter> getFilters();
// Access methods
public RequestMatcher getRequestMatcher();
}// Create filter chain for admin paths
RequestMatcher adminMatcher = new AntPathRequestMatcher("/admin/**");
List<Filter> adminFilters = Arrays.asList(
new SecurityContextHolderFilter(repository),
new AdminAuthenticationFilter(),
new AdminAuthorizationFilter()
);
SecurityFilterChain adminChain = new DefaultSecurityFilterChain(adminMatcher, adminFilters);
// Create filter chain for public paths
RequestMatcher publicMatcher = new AntPathRequestMatcher("/public/**");
List<Filter> publicFilters = Arrays.asList(
new AnonymousAuthenticationFilter("anonymous")
);
SecurityFilterChain publicChain = new DefaultSecurityFilterChain(publicMatcher, publicFilters);Filter chain decoration allows customization of how filters are executed.
public interface FilterChainDecorator {
default FilterChain decorate(FilterChain original);
FilterChain decorate(FilterChain original, List<Filter> filters);
}
public static final class VirtualFilterChainDecorator implements FilterChainDecorator {
public FilterChain decorate(FilterChain original);
public FilterChain decorate(FilterChain original, List<Filter> filters);
}Validation ensures filter chains are correctly configured.
public interface FilterChainValidator {
void validate(FilterChainProxy filterChainProxy);
}// For REST APIs with JWT authentication
SecurityFilterChain apiChain = new DefaultSecurityFilterChain(
new AntPathRequestMatcher("/api/**"),
new JwtAuthenticationFilter(),
new AuthorizationFilter()
);// For traditional web applications
SecurityFilterChain webChain = new DefaultSecurityFilterChain(
new AntPathRequestMatcher("/**"),
new SecurityContextHolderFilter(new HttpSessionSecurityContextRepository()),
new CsrfFilter(new HttpSessionCsrfTokenRepository()),
new UsernamePasswordAuthenticationFilter(),
new RememberMeAuthenticationFilter(authenticationManager, rememberMeServices),
new AnonymousAuthenticationFilter("anonymous"),
new SessionManagementFilter(repository),
new ExceptionTranslationFilter(),
new AuthorizationFilter()
);// For publicly accessible resources
SecurityFilterChain publicChain = new DefaultSecurityFilterChain(
new OrRequestMatcher(
new AntPathRequestMatcher("/css/**"),
new AntPathRequestMatcher("/js/**"),
new AntPathRequestMatcher("/images/**")
),
// Empty filter list - no security processing
);Filter chains can encounter various exceptions during processing:
The FilterChainProxy handles these exceptions and delegates to appropriate handlers like RequestRejectedHandler and AuthenticationEntryPoint.
Install with Tessl CLI
npx tessl i tessl/maven-org-springframework-security--spring-security-web