Spring Security configuration module providing comprehensive declarative security configuration capabilities for Spring applications
npx @tessl/cli install tessl/maven-org-springframework-security--spring-security-config@6.5.0Spring Security Config provides comprehensive declarative security configuration capabilities for Spring applications. It offers annotation-based configuration, fluent builders, and specialized configurers to define authentication, authorization, and security policies without programmatic filter chain construction.
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>6.5.1</version>
</dependency>import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll()
)
.logout(logout -> logout.permitAll())
.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}Spring Security Config uses a layered architecture:
The module integrates with Spring's dependency injection container and follows the builder pattern for configuration flexibility.
Essential annotations for enabling and configuring Spring Security features.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({WebSecurityConfiguration.class, SpringWebMvcImportSelector.class,
OAuth2ImportSelector.class, HttpSecurityConfiguration.class})
@EnableGlobalAuthentication
public @interface EnableWebSecurity {
boolean debug() default false;
}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(MethodSecurityConfiguration.class)
public @interface EnableMethodSecurity {
boolean prePostEnabled() default true;
boolean securedEnabled() default false;
boolean jsr250Enabled() default false;
boolean proxyTargetClass() default false;
AdviceMode mode() default AdviceMode.PROXY;
int offset() default 0;
}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ReactiveMethodSecurityConfiguration.class)
public @interface EnableReactiveMethodSecurity {
boolean proxyTargetClass() default false;
AdviceMode mode() default AdviceMode.PROXY;
int order() default Ordered.LOWEST_PRECEDENCE;
boolean useAuthorizationManager() default true;
}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({ServerHttpSecurityConfiguration.class, WebFluxSecurityConfiguration.class,
ReactiveOAuth2ClientImportSelector.class, ReactiveObservationImportSelector.class})
public @interface EnableWebFluxSecurity {
}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({WebSocketMessageBrokerSecurityConfiguration.class, WebSocketObservationImportSelector.class})
public @interface EnableWebSocketSecurity {
}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({RSocketSecurityConfiguration.class, SecuritySocketAcceptorInterceptorConfiguration.class,
ReactiveObservationImportSelector.class})
public @interface EnableRSocketSecurity {
}/** @deprecated Use @EnableMethodSecurity instead */
@Deprecated
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(GlobalMethodSecurityConfiguration.class)
public @interface EnableGlobalMethodSecurity {
boolean prePostEnabled() default false;
boolean securedEnabled() default false;
boolean jsr250Enabled() default false;
boolean proxyTargetClass() default false;
AdviceMode mode() default AdviceMode.PROXY;
int order() default Ordered.LOWEST_PRECEDENCE;
}Fluent API builders for constructing security configuration objects.
public final class HttpSecurity extends AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity>
implements SecurityBuilder<DefaultSecurityFilterChain>, HttpSecurityBuilder<HttpSecurity> {
// Authorization Configuration
public AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry authorizeHttpRequests();
public AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry authorizeHttpRequests(
Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry> authorizeHttpRequestsCustomizer);
/** @deprecated Use authorizeHttpRequests() instead */
@Deprecated
public ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry authorizeRequests();
/** @deprecated Use authorizeHttpRequests() instead */
@Deprecated
public ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry authorizeRequests(
Customizer<ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry> authorizeRequestsCustomizer);
// Authentication Methods
public FormLoginConfigurer<HttpSecurity> formLogin();
public FormLoginConfigurer<HttpSecurity> formLogin(Customizer<FormLoginConfigurer<HttpSecurity>> formLoginCustomizer);
public HttpBasicConfigurer<HttpSecurity> httpBasic();
public HttpBasicConfigurer<HttpSecurity> httpBasic(Customizer<HttpBasicConfigurer<HttpSecurity>> httpBasicCustomizer);
public OAuth2LoginConfigurer<HttpSecurity> oauth2Login();
public OAuth2LoginConfigurer<HttpSecurity> oauth2Login(Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer);
public OAuth2ClientConfigurer<HttpSecurity> oauth2Client();
public OAuth2ClientConfigurer<HttpSecurity> oauth2Client(Customizer<OAuth2ClientConfigurer<HttpSecurity>> oauth2ClientCustomizer);
public OAuth2ResourceServerConfigurer<HttpSecurity> oauth2ResourceServer();
public OAuth2ResourceServerConfigurer<HttpSecurity> oauth2ResourceServer(Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer);
public Saml2LoginConfigurer<HttpSecurity> saml2Login();
public Saml2LoginConfigurer<HttpSecurity> saml2Login(Customizer<Saml2LoginConfigurer<HttpSecurity>> saml2LoginCustomizer);
public Saml2LogoutConfigurer<HttpSecurity> saml2Logout();
public Saml2LogoutConfigurer<HttpSecurity> saml2Logout(Customizer<Saml2LogoutConfigurer<HttpSecurity>> saml2LogoutCustomizer);
public Saml2MetadataConfigurer<HttpSecurity> saml2Metadata();
public Saml2MetadataConfigurer<HttpSecurity> saml2Metadata(Customizer<Saml2MetadataConfigurer<HttpSecurity>> saml2MetadataCustomizer);
public OidcLogoutConfigurer<HttpSecurity> oidcLogout();
public OidcLogoutConfigurer<HttpSecurity> oidcLogout(Customizer<OidcLogoutConfigurer<HttpSecurity>> oidcLogoutCustomizer);
public OneTimeTokenLoginConfigurer<HttpSecurity> oneTimeTokenLogin();
public OneTimeTokenLoginConfigurer<HttpSecurity> oneTimeTokenLogin(Customizer<OneTimeTokenLoginConfigurer<HttpSecurity>> oneTimeTokenLoginCustomizer);
public WebAuthnConfigurer<HttpSecurity> webAuthn(Customizer<WebAuthnConfigurer<HttpSecurity>> webAuthnCustomizer);
public X509Configurer<HttpSecurity> x509();
public X509Configurer<HttpSecurity> x509(Customizer<X509Configurer<HttpSecurity>> x509Customizer);
public JeeConfigurer<HttpSecurity> jee();
public JeeConfigurer<HttpSecurity> jee(Customizer<JeeConfigurer<HttpSecurity>> jeeCustomizer);
public RememberMeConfigurer<HttpSecurity> rememberMe();
public RememberMeConfigurer<HttpSecurity> rememberMe(Customizer<RememberMeConfigurer<HttpSecurity>> rememberMeCustomizer);
public AnonymousConfigurer<HttpSecurity> anonymous();
public AnonymousConfigurer<HttpSecurity> anonymous(Customizer<AnonymousConfigurer<HttpSecurity>> anonymousCustomizer);
// Session and Security Context Management
public SessionManagementConfigurer<HttpSecurity> sessionManagement();
public SessionManagementConfigurer<HttpSecurity> sessionManagement(Customizer<SessionManagementConfigurer<HttpSecurity>> sessionManagementCustomizer);
public SecurityContextConfigurer<HttpSecurity> securityContext();
public SecurityContextConfigurer<HttpSecurity> securityContext(Customizer<SecurityContextConfigurer<HttpSecurity>> securityContextCustomizer);
// Security Features
public CsrfConfigurer<HttpSecurity> csrf();
public CsrfConfigurer<HttpSecurity> csrf(Customizer<CsrfConfigurer<HttpSecurity>> csrfCustomizer);
public CorsConfigurer<HttpSecurity> cors();
public CorsConfigurer<HttpSecurity> cors(Customizer<CorsConfigurer<HttpSecurity>> corsCustomizer);
public HeadersConfigurer<HttpSecurity> headers();
public HeadersConfigurer<HttpSecurity> headers(Customizer<HeadersConfigurer<HttpSecurity>> headersCustomizer);
public LogoutConfigurer<HttpSecurity> logout();
public LogoutConfigurer<HttpSecurity> logout(Customizer<LogoutConfigurer<HttpSecurity>> logoutCustomizer);
public RequireChannelConfigurer<HttpSecurity> requiresChannel();
public RequireChannelConfigurer<HttpSecurity> requiresChannel(Customizer<RequireChannelConfigurer<HttpSecurity>> requiresChannelCustomizer);
public HttpSecurity redirectToHttps();
public PasswordManagementConfigurer<HttpSecurity> passwordManagement(Customizer<PasswordManagementConfigurer<HttpSecurity>> passwordManagementCustomizer);
// Exception and Request Handling
public ExceptionHandlingConfigurer<HttpSecurity> exceptionHandling();
public ExceptionHandlingConfigurer<HttpSecurity> exceptionHandling(Customizer<ExceptionHandlingConfigurer<HttpSecurity>> exceptionHandlingCustomizer);
public RequestCacheConfigurer<HttpSecurity> requestCache();
public RequestCacheConfigurer<HttpSecurity> requestCache(Customizer<RequestCacheConfigurer<HttpSecurity>> requestCacheCustomizer);
// Security Matchers and Configuration
public SecurityMatcher securityMatchers();
public SecurityMatcher securityMatchers(Customizer<SecurityMatcher> securityMatcherCustomizer);
public HttpSecurity securityMatcher(RequestMatcher requestMatcher);
public HttpSecurity securityMatcher(String... patterns);
// Authentication Infrastructure
public HttpSecurity authenticationManager(AuthenticationManager authenticationManager);
public HttpSecurity authenticationProvider(AuthenticationProvider authenticationProvider);
public HttpSecurity userDetailsService(UserDetailsService userDetailsService);
// Filter Management
public HttpSecurity addFilter(Filter filter);
public HttpSecurity addFilterAfter(Filter filter, Class<? extends Filter> afterFilter);
public HttpSecurity addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter);
public HttpSecurity addFilterAt(Filter filter, Class<? extends Filter> atFilter);
// Final Build
public DefaultSecurityFilterChain build() throws Exception;
}public final class WebSecurity extends AbstractConfiguredSecurityBuilder<Filter, WebSecurity>
implements SecurityBuilder<Filter> {
public WebSecurity ignoring();
public WebSecurity debug(boolean debugEnabled);
public WebSecurity httpFirewall(HttpFirewall httpFirewall);
public Filter build() throws Exception;
}Specialized configurers for authentication, authorization, and security protection.
public final class FormLoginConfigurer<H extends HttpSecurityBuilder<H>>
extends AbstractAuthenticationFilterConfigurer<H, FormLoginConfigurer<H>, UsernamePasswordAuthenticationFilter> {
public FormLoginConfigurer<H> loginPage(String loginPage);
public FormLoginConfigurer<H> defaultSuccessUrl(String defaultSuccessUrl);
public FormLoginConfigurer<H> failureUrl(String authenticationFailureUrl);
public FormLoginConfigurer<H> usernameParameter(String usernameParameter);
public FormLoginConfigurer<H> passwordParameter(String passwordParameter);
}public final class AuthorizeHttpRequestsConfigurer<H extends HttpSecurityBuilder<H>>
extends AbstractRequestMatcherRegistry<AuthorizeHttpRequestsConfigurer<H>.AuthorizationManagerRequestMatcherRegistry> {
public AuthorizeHttpRequestsConfigurer<H>.AuthorizationManagerRequestMatcherRegistry requestMatchers(String... patterns);
public AuthorizeHttpRequestsConfigurer<H>.AuthorizationManagerRequestMatcherRegistry requestMatchers(HttpMethod method, String... patterns);
public AuthorizeHttpRequestsConfigurer<H>.AuthorizationManagerRequestMatcherRegistry anyRequest();
}Modern authentication protocol configuration support.
public final class OAuth2LoginConfigurer<H extends HttpSecurityBuilder<H>>
extends AbstractAuthenticationFilterConfigurer<H, OAuth2LoginConfigurer<H>, OAuth2LoginAuthenticationFilter> {
public OAuth2LoginConfigurer<H> clientRegistrationRepository(ClientRegistrationRepository clientRegistrationRepository);
public OAuth2LoginConfigurer<H> authorizedClientService(OAuth2AuthorizedClientService authorizedClientService);
public OAuth2LoginConfigurer<H> userInfoEndpoint(Customizer<UserInfoEndpointConfig> userInfoEndpointCustomizer);
}public final class OAuth2ResourceServerConfigurer<H extends HttpSecurityBuilder<H>>
extends AbstractHttpConfigurer<OAuth2ResourceServerConfigurer<H>, H> {
public OAuth2ResourceServerConfigurer<H> jwt(Customizer<JwtConfigurer> jwtCustomizer);
public OAuth2ResourceServerConfigurer<H> opaqueToken(Customizer<OpaqueTokenConfigurer> opaqueTokenCustomizer);
public OAuth2ResourceServerConfigurer<H> bearerTokenResolver(BearerTokenResolver bearerTokenResolver);
}OAuth2 and SAML2 Configuration
User details services, authentication providers, and authentication managers.
public class AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager, AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder> {
public InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder> inMemoryAuthentication();
public JdbcUserDetailsManagerConfigurer<AuthenticationManagerBuilder> jdbcAuthentication();
public LdapAuthenticationProviderConfigurer<AuthenticationManagerBuilder> ldapAuthentication();
public DaoAuthenticationConfigurer<AuthenticationManagerBuilder, InMemoryUserDetailsManager> userDetailsService(UserDetailsService userDetailsService);
public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider);
}Annotation-based method-level security configuration.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ReactiveMethodSecurityConfiguration.class)
public @interface EnableReactiveMethodSecurity {
boolean proxyTargetClass() default false;
AdviceMode mode() default AdviceMode.PROXY;
int order() default Ordered.LOWEST_PRECEDENCE;
boolean useAuthorizationManager() default true;
}public abstract class GlobalMethodSecurityConfiguration implements ImportAware, BeanClassLoaderAware {
protected void configure(AuthenticationManagerBuilder auth) throws Exception;
protected AccessDecisionManager accessDecisionManager();
protected MethodSecurityExpressionHandler createExpressionHandler();
}public interface SecurityBuilder<O> {
O build() throws Exception;
}public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> {
void init(B builder) throws Exception;
void configure(B builder) throws Exception;
}public abstract class SecurityConfigurerAdapter<O, B extends SecurityBuilder<O>>
implements SecurityConfigurer<O, B> {
public void init(B builder) throws Exception;
public void configure(B builder) throws Exception;
public B and();
protected final O postProcess(O object);
}@FunctionalInterface
public interface Customizer<T> {
void customize(T t);
static <T> Customizer<T> withDefaults() {
return (t) -> {};
}
}public interface ObjectPostProcessor<T> {
<O extends T> O postProcess(O object);
}public final class BeanIds {
public static final String AUTHENTICATION_MANAGER = "org.springframework.security.authenticationManager";
public static final String SPRING_SECURITY_FILTER_CHAIN = "org.springframework.security.filterChain";
public static final String USER_DETAILS_SERVICE = "org.springframework.security.userDetailsService";
public static final String FILTER_CHAIN_PROXY = "org.springframework.security.web.FilterChainProxy";
}