From 2e26e875c88b2570fa209a9c0205537c2ea868b5 Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Fri, 19 Aug 2022 17:31:38 -0500 Subject: [PATCH 1/2] Remove WebSecurityConfigurerAdapter in Kotlin DSL Issue gh-11277 Closes gh-11646 --- .../config/web/servlet/HttpSecurityDsl.kt | 180 ++++++++++++------ .../config/web/servlet/OAuth2ClientDsl.kt | 10 +- .../config/web/servlet/OAuth2LoginDsl.kt | 34 ++-- .../web/servlet/OAuth2ResourceServerDsl.kt | 18 +- .../web/servlet/SessionManagementDsl.kt | 18 +- 5 files changed, 169 insertions(+), 91 deletions(-) diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt index 64820cc51c..75df4e9801 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt @@ -33,9 +33,10 @@ import javax.servlet.http.HttpServletRequest * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * authorizeRequests { * authorize("/public", permitAll) @@ -45,6 +46,7 @@ import javax.servlet.http.HttpServletRequest * loginPage = "/log-in" * } * } + * return http.build() * } * } * ``` @@ -83,15 +85,17 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * securityMatcher("/private/**") * formLogin { * loginPage = "/log-in" * } * } + * return http.build() * } * } * ``` @@ -123,15 +127,17 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * securityMatcher(AntPathRequestMatcher("/private/**")) * formLogin { * loginPage = "/log-in" * } * } + * return http.build() * } * } * ``` @@ -152,14 +158,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * formLogin { * loginPage = "/log-in" * } * } + * return http.build() * } * } * ``` @@ -180,15 +188,17 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * authorizeRequests { * authorize("/public", permitAll) * authorize(anyRequest, authenticated) * } * } + * return http.build() * } * } * ``` @@ -241,14 +251,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * httpBasic { * realmName = "Custom Realm" * } * } + * return http.build() * } * } * ``` @@ -269,14 +281,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * passwordManagement { * changePasswordPage = "/custom-change-password-page" * } * } + * return http.build() * } * } * ``` @@ -298,9 +312,10 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * headers { * referrerPolicy { @@ -308,6 +323,7 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * } * } * } + * return http.build() * } * } * ``` @@ -328,14 +344,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * cors { * disable() * } * } + * return http.build() * } * } * ``` @@ -356,9 +374,10 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * sessionManagement { * invalidSessionUrl = "/invalid-session" @@ -367,6 +386,7 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * } * } * } + * return http.build() * } * } * ``` @@ -387,14 +407,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * portMapper { * map(80, 443) * } * } + * return http.build() * } * } * ``` @@ -415,15 +437,17 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * requiresChannel { * secure("/public", requiresInsecure) * secure(anyRequest, requiresSecure) * } * } + * return http.build() * } * } * ``` @@ -444,12 +468,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * x509 { } * } + * return http.build() * } * } * ``` @@ -471,12 +497,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * requestCache { } * } + * return http.build() * } * } * ``` @@ -497,14 +525,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * exceptionHandling { * accessDeniedPage = "/access-denied" * } * } + * return http.build() * } * } * ``` @@ -525,12 +555,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * csrf { } * } + * return http.build() * } * } * ``` @@ -550,14 +582,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * logout { * logoutUrl = "/log-out" * } * } + * return http.build() * } * } * ``` @@ -580,14 +614,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * saml2Login { * relyingPartyRegistration = getSaml2RelyingPartyRegistration() * } * } + * return http.build() * } * } * ``` @@ -608,14 +644,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * anonymous { * authorities = listOf(SimpleGrantedAuthority("ROLE_ANON")) * } * } + * return http.build() * } * } * ``` @@ -638,14 +676,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * oauth2Login { * clientRegistrationRepository = getClientRegistrationRepository() * } * } + * return http.build() * } * } * ``` @@ -666,12 +706,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * oauth2Client { } * } + * return http.build() * } * } * ``` @@ -692,14 +734,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * oauth2ResourceServer { * jwt { } * } * } + * return http.build() * } * } * ``` @@ -720,14 +764,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * rememberMe { * tokenValiditySeconds = 604800 * } * } + * return http.build() * } * } * ``` @@ -747,12 +793,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterAt(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) * } + * return http.build() * } * } * ``` @@ -774,12 +822,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterAt(CustomFilter()) * } + * return http.build() * } * } * ``` @@ -800,12 +850,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterAfter(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) * } + * return http.build() * } * } * ``` @@ -827,12 +879,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterAfter(CustomFilter()) * } + * return http.build() * } * } * ``` @@ -853,12 +907,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterBefore(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) * } + * return http.build() * } * } * ``` @@ -880,12 +936,14 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * addFilterBefore(CustomFilter()) * } + * return http.build() * } * } * ``` @@ -914,14 +972,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * securityContext { * securityContextRepository = SECURITY_CONTEXT_REPOSITORY * } * } + * return http.build() * } * } * ``` diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt index 2681ed4e19..5749078317 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -65,16 +65,18 @@ class OAuth2ClientDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2Client { * authorizationCodeGrant { * authorizationRequestResolver = getAuthorizationRequestResolver() * } * } * } + * return http.build() * } * } * ``` diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt index 09668dcaa2..54333eeb00 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -97,16 +97,18 @@ class OAuth2LoginDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2Login { * authorizationEndpoint { * baseUri = "/auth" * } * } * } + * return http.build() * } * } * ``` @@ -126,16 +128,18 @@ class OAuth2LoginDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2Login { * tokenEndpoint { * accessTokenResponseClient = getAccessTokenResponseClient() * } * } * } + * return http.build() * } * } * ``` @@ -155,16 +159,18 @@ class OAuth2LoginDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2Login { * redirectionEndpoint { * baseUri = "/home" * } * } * } + * return http.build() * } * } * ``` @@ -184,16 +190,18 @@ class OAuth2LoginDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2Login { * userInfoEndpoint { * userService = getUserService() * } * } * } + * return http.build() * } * } * ``` diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt index d881c27f14..adf893f5c3 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,16 +56,18 @@ class OAuth2ResourceServerDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2ResourceServer { * jwt { * jwkSetUri = "https://example.com/oauth2/jwk" * } * } * } + * return http.build() * } * } * ``` @@ -84,14 +86,16 @@ class OAuth2ResourceServerDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * oauth2ResourceServer { * opaqueToken { } * } * } + * return http.build() * } * } * ``` diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt index c0405ff4f8..fa06475e1f 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,14 +51,16 @@ class SessionManagementDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * sessionManagement { * sessionFixation { } * } * } + * return http.build() * } * } * ``` @@ -78,10 +80,11 @@ class SessionManagementDsl { * * ``` * @EnableWebSecurity - * class SecurityConfig : WebSecurityConfigurerAdapter() { + * class SecurityConfig { * - * override fun configure(http: HttpSecurity) { - * httpSecurity(http) { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { * sessionManagement { * sessionConcurrency { * maximumSessions = 1 @@ -89,6 +92,7 @@ class SessionManagementDsl { * } * } * } + * return http.build() * } * } * ``` From 5bdbc3f78d4a96ea4604369a94f0f209376c3bdc Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Tue, 30 Aug 2022 12:53:37 -0500 Subject: [PATCH 2/2] Polish javadoc in Kotlin DSL Issue gh-11646 --- .../config/web/servlet/HttpSecurityDsl.kt | 506 +++++++++--------- .../config/web/servlet/OAuth2ClientDsl.kt | 22 +- .../config/web/servlet/OAuth2LoginDsl.kt | 70 +-- .../web/servlet/OAuth2ResourceServerDsl.kt | 40 +- .../web/servlet/SessionManagementDsl.kt | 30 +- 5 files changed, 334 insertions(+), 334 deletions(-) diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt index 75df4e9801..8e0b790177 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/HttpSecurityDsl.kt @@ -35,19 +35,19 @@ import javax.servlet.http.HttpServletRequest * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * authorizeRequests { - * authorize("/public", permitAll) - * authorize(anyRequest, authenticated) - * } - * formLogin { - * loginPage = "/log-in" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * authorizeRequests { + * authorize("/public", permitAll) + * authorize(anyRequest, authenticated) + * } + * formLogin { + * loginPage = "/log-in" + * } + * } + * return http.build() + * } * } * ``` * @@ -87,16 +87,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * securityMatcher("/private/**") - * formLogin { - * loginPage = "/log-in" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * securityMatcher("/private/**") + * formLogin { + * loginPage = "/log-in" + * } + * } + * return http.build() + * } * } * ``` * @@ -129,16 +129,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * securityMatcher(AntPathRequestMatcher("/private/**")) - * formLogin { - * loginPage = "/log-in" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * securityMatcher(AntPathRequestMatcher("/private/**")) + * formLogin { + * loginPage = "/log-in" + * } + * } + * return http.build() + * } * } * ``` * @@ -160,15 +160,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * formLogin { - * loginPage = "/log-in" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * formLogin { + * loginPage = "/log-in" + * } + * } + * return http.build() + * } * } * ``` * @@ -190,16 +190,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * authorizeRequests { - * authorize("/public", permitAll) - * authorize(anyRequest, authenticated) - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * authorizeRequests { + * authorize("/public", permitAll) + * authorize(anyRequest, authenticated) + * } + * } + * return http.build() + * } * } * ``` * @@ -221,16 +221,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * authorizeHttpRequests { - * authorize("/public", permitAll) - * authorize(anyRequest, authenticated) - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * authorizeHttpRequests { + * authorize("/public", permitAll) + * authorize(anyRequest, authenticated) + * } + * } + * return http.build() + * } * } * ``` * @@ -253,15 +253,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * httpBasic { - * realmName = "Custom Realm" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * httpBasic { + * realmName = "Custom Realm" + * } + * } + * return http.build() + * } * } * ``` * @@ -283,15 +283,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * passwordManagement { - * changePasswordPage = "/custom-change-password-page" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * passwordManagement { + * changePasswordPage = "/custom-change-password-page" + * } + * } + * return http.build() + * } * } * ``` * @@ -314,17 +314,17 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * headers { - * referrerPolicy { - * policy = ReferrerPolicy.SAME_ORIGIN - * } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * headers { + * referrerPolicy { + * policy = ReferrerPolicy.SAME_ORIGIN + * } + * } + * } + * return http.build() + * } * } * ``` * @@ -346,15 +346,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * cors { - * disable() - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * cors { + * disable() + * } + * } + * return http.build() + * } * } * ``` * @@ -376,18 +376,18 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * sessionManagement { - * invalidSessionUrl = "/invalid-session" - * sessionConcurrency { - * maximumSessions = 1 - * } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * sessionManagement { + * invalidSessionUrl = "/invalid-session" + * sessionConcurrency { + * maximumSessions = 1 + * } + * } + * } + * return http.build() + * } * } * ``` * @@ -409,15 +409,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * portMapper { - * map(80, 443) - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * portMapper { + * map(80, 443) + * } + * } + * return http.build() + * } * } * ``` * @@ -439,16 +439,16 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * requiresChannel { - * secure("/public", requiresInsecure) - * secure(anyRequest, requiresSecure) - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * requiresChannel { + * secure("/public", requiresInsecure) + * secure(anyRequest, requiresSecure) + * } + * } + * return http.build() + * } * } * ``` * @@ -470,13 +470,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * x509 { } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * x509 { } + * } + * return http.build() + * } * } * ``` * @@ -499,13 +499,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * requestCache { } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * requestCache { } + * } + * return http.build() + * } * } * ``` * @@ -527,15 +527,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * exceptionHandling { - * accessDeniedPage = "/access-denied" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * exceptionHandling { + * accessDeniedPage = "/access-denied" + * } + * } + * return http.build() + * } * } * ``` * @@ -557,13 +557,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * csrf { } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * csrf { } + * } + * return http.build() + * } * } * ``` * @@ -584,15 +584,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * logout { - * logoutUrl = "/log-out" - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * logout { + * logoutUrl = "/log-out" + * } + * } + * return http.build() + * } * } * ``` * @@ -616,15 +616,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * saml2Login { - * relyingPartyRegistration = getSaml2RelyingPartyRegistration() - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * saml2Login { + * relyingPartyRegistration = getSaml2RelyingPartyRegistration() + * } + * } + * return http.build() + * } * } * ``` * @@ -646,15 +646,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * anonymous { - * authorities = listOf(SimpleGrantedAuthority("ROLE_ANON")) - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * anonymous { + * authorities = listOf(SimpleGrantedAuthority("ROLE_ANON")) + * } + * } + * return http.build() + * } * } * ``` * @@ -678,15 +678,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Login { - * clientRegistrationRepository = getClientRegistrationRepository() - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2Login { + * clientRegistrationRepository = getClientRegistrationRepository() + * } + * } + * return http.build() + * } * } * ``` * @@ -708,13 +708,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Client { } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2Client { } + * } + * return http.build() + * } * } * ``` * @@ -736,15 +736,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2ResourceServer { - * jwt { } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2ResourceServer { + * jwt { } + * } + * } + * return http.build() + * } * } * ``` * @@ -766,15 +766,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * rememberMe { - * tokenValiditySeconds = 604800 - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * rememberMe { + * tokenValiditySeconds = 604800 + * } + * } + * return http.build() + * } * } * ``` * @@ -795,13 +795,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * addFilterAt(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * addFilterAt(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) + * } + * return http.build() + * } * } * ``` * @@ -852,13 +852,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * addFilterAfter(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * addFilterAfter(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) + * } + * return http.build() + * } * } * ``` * @@ -909,13 +909,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * addFilterBefore(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * addFilterBefore(CustomFilter(), UsernamePasswordAuthenticationFilter::class.java) + * } + * return http.build() + * } * } * ``` * @@ -938,13 +938,13 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * addFilterBefore(CustomFilter()) - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * addFilterBefore(CustomFilter()) + * } + * return http.build() + * } * } * ``` * @@ -974,15 +974,15 @@ class HttpSecurityDsl(private val http: HttpSecurity, private val init: HttpSecu * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { * http { * securityContext { * securityContextRepository = SECURITY_CONTEXT_REPOSITORY * } * } * return http.build() - * } + * } * } * ``` * @author Norbert Nowak diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt index 5749078317..51d6d958a7 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ClientDsl.kt @@ -67,17 +67,17 @@ class OAuth2ClientDsl { * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Client { - * authorizationCodeGrant { - * authorizationRequestResolver = getAuthorizationRequestResolver() - * } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2Client { + * authorizationCodeGrant { + * authorizationRequestResolver = getAuthorizationRequestResolver() + * } + * } + * } + * return http.build() + * } * } * ``` * diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt index 54333eeb00..77471e71b3 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2LoginDsl.kt @@ -99,17 +99,17 @@ class OAuth2LoginDsl { * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Login { - * authorizationEndpoint { - * baseUri = "/auth" - * } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2Login { + * authorizationEndpoint { + * baseUri = "/auth" + * } + * } + * } + * return http.build() + * } * } * ``` * @@ -132,14 +132,14 @@ class OAuth2LoginDsl { * * @Bean * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Login { - * tokenEndpoint { - * accessTokenResponseClient = getAccessTokenResponseClient() - * } - * } - * } - * return http.build() + * http { + * oauth2Login { + * tokenEndpoint { + * accessTokenResponseClient = getAccessTokenResponseClient() + * } + * } + * } + * return http.build() * } * } * ``` @@ -163,14 +163,14 @@ class OAuth2LoginDsl { * * @Bean * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Login { - * redirectionEndpoint { - * baseUri = "/home" - * } - * } - * } - * return http.build() + * http { + * oauth2Login { + * redirectionEndpoint { + * baseUri = "/home" + * } + * } + * } + * return http.build() * } * } * ``` @@ -194,14 +194,14 @@ class OAuth2LoginDsl { * * @Bean * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2Login { - * userInfoEndpoint { - * userService = getUserService() - * } - * } - * } - * return http.build() + * http { + * oauth2Login { + * userInfoEndpoint { + * userService = getUserService() + * } + * } + * } + * return http.build() * } * } * ``` diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt index adf893f5c3..49b97d9c60 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/OAuth2ResourceServerDsl.kt @@ -58,17 +58,17 @@ class OAuth2ResourceServerDsl { * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2ResourceServer { - * jwt { - * jwkSetUri = "https://example.com/oauth2/jwk" - * } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2ResourceServer { + * jwt { + * jwkSetUri = "https://example.com/oauth2/jwk" + * } + * } + * } + * return http.build() + * } * } * ``` * @@ -88,15 +88,15 @@ class OAuth2ResourceServerDsl { * @EnableWebSecurity * class SecurityConfig { * - * @Bean - * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * oauth2ResourceServer { - * opaqueToken { } - * } - * } - * return http.build() - * } + * @Bean + * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { + * http { + * oauth2ResourceServer { + * opaqueToken { } + * } + * } + * return http.build() + * } * } * ``` * diff --git a/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt b/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt index fa06475e1f..783a7bf49d 100644 --- a/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt +++ b/config/src/main/kotlin/org/springframework/security/config/web/servlet/SessionManagementDsl.kt @@ -55,12 +55,12 @@ class SessionManagementDsl { * * @Bean * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * sessionManagement { - * sessionFixation { } - * } - * } - * return http.build() + * http { + * sessionManagement { + * sessionFixation { } + * } + * } + * return http.build() * } * } * ``` @@ -84,15 +84,15 @@ class SessionManagementDsl { * * @Bean * fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { - * http { - * sessionManagement { - * sessionConcurrency { - * maximumSessions = 1 - * maxSessionsPreventsLogin = true - * } - * } - * } - * return http.build() + * http { + * sessionManagement { + * sessionConcurrency { + * maximumSessions = 1 + * maxSessionsPreventsLogin = true + * } + * } + * } + * return http.build() * } * } * ```