mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-12 21:33:30 +00:00
Change Kotlin tests that are using mockkObject with a lambda interface implementation
Closes gh-10702
This commit is contained in:
parent
9dd9e6bd61
commit
7fd0530009
@ -33,6 +33,7 @@ import org.springframework.security.core.userdetails.UserDetailsService
|
|||||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
||||||
|
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy
|
||||||
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
|
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
|
||||||
import org.springframework.security.web.csrf.CsrfTokenRepository
|
import org.springframework.security.web.csrf.CsrfTokenRepository
|
||||||
import org.springframework.security.web.csrf.DefaultCsrfToken
|
import org.springframework.security.web.csrf.DefaultCsrfToken
|
||||||
@ -180,7 +181,7 @@ class CsrfDslTests {
|
|||||||
open class CustomStrategyConfig : WebSecurityConfigurerAdapter() {
|
open class CustomStrategyConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val STRATEGY: SessionAuthenticationStrategy = SessionAuthenticationStrategy { _, _, _ -> }
|
var STRATEGY: SessionAuthenticationStrategy = NullAuthenticatedSessionStrategy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package org.springframework.security.config.annotation.web
|
package org.springframework.security.config.annotation.web
|
||||||
|
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
import io.mockk.mockkObject
|
import io.mockk.mockkObject
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@ -41,6 +42,8 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirec
|
|||||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import jakarta.servlet.http.HttpServletRequest
|
import jakarta.servlet.http.HttpServletRequest
|
||||||
|
import org.springframework.security.web.authentication.WebAuthenticationDetails
|
||||||
|
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for [FormLoginDsl]
|
* Tests for [FormLoginDsl]
|
||||||
@ -293,7 +296,7 @@ class FormLoginDslTests {
|
|||||||
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
||||||
every {
|
every {
|
||||||
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
||||||
} returns Any()
|
} returns mockk()
|
||||||
|
|
||||||
this.mockMvc.perform(formLogin())
|
this.mockMvc.perform(formLogin())
|
||||||
.andExpect {
|
.andExpect {
|
||||||
@ -308,8 +311,7 @@ class FormLoginDslTests {
|
|||||||
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_DETAILS_SOURCE: AuthenticationDetailsSource<HttpServletRequest, *> =
|
val AUTHENTICATION_DETAILS_SOURCE = WebAuthenticationDetailsSource()
|
||||||
AuthenticationDetailsSource<HttpServletRequest, Any> { Any() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package org.springframework.security.config.annotation.web
|
package org.springframework.security.config.annotation.web
|
||||||
|
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
import io.mockk.mockkObject
|
import io.mockk.mockkObject
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import jakarta.servlet.http.HttpServletRequest
|
import jakarta.servlet.http.HttpServletRequest
|
||||||
@ -25,6 +26,7 @@ import org.junit.jupiter.api.extension.ExtendWith
|
|||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.security.authentication.AuthenticationDetailsSource
|
import org.springframework.security.authentication.AuthenticationDetailsSource
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
|
||||||
@ -36,6 +38,8 @@ import org.springframework.security.core.userdetails.UserDetailsService
|
|||||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic
|
||||||
import org.springframework.security.web.AuthenticationEntryPoint
|
import org.springframework.security.web.AuthenticationEntryPoint
|
||||||
|
import org.springframework.security.web.authentication.HttpStatusEntryPoint
|
||||||
|
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource
|
||||||
import org.springframework.test.web.servlet.MockMvc
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
import org.springframework.test.web.servlet.get
|
import org.springframework.test.web.servlet.get
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
@ -136,7 +140,7 @@ class HttpBasicDslTests {
|
|||||||
open class CustomAuthenticationEntryPointConfig : WebSecurityConfigurerAdapter() {
|
open class CustomAuthenticationEntryPointConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val ENTRY_POINT: AuthenticationEntryPoint = AuthenticationEntryPoint { _, _, _ -> }
|
val ENTRY_POINT: AuthenticationEntryPoint = HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -159,7 +163,7 @@ class HttpBasicDslTests {
|
|||||||
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
||||||
every {
|
every {
|
||||||
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
||||||
} returns Any()
|
} returns mockk()
|
||||||
|
|
||||||
this.mockMvc.get("/") {
|
this.mockMvc.get("/") {
|
||||||
with(httpBasic("username", "password"))
|
with(httpBasic("username", "password"))
|
||||||
@ -172,8 +176,7 @@ class HttpBasicDslTests {
|
|||||||
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_DETAILS_SOURCE: AuthenticationDetailsSource<HttpServletRequest, *> =
|
val AUTHENTICATION_DETAILS_SOURCE = WebAuthenticationDetailsSource()
|
||||||
AuthenticationDetailsSource<HttpServletRequest, Any> { Any() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -19,6 +19,8 @@ package org.springframework.security.config.annotation.web
|
|||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.mockkObject
|
import io.mockk.mockkObject
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
|
import jakarta.servlet.http.HttpServletRequest
|
||||||
|
import jakarta.servlet.http.HttpServletResponse
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
@ -30,6 +32,7 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
|
|||||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.core.Authentication
|
||||||
import org.springframework.security.core.context.SecurityContextHolder
|
import org.springframework.security.core.context.SecurityContextHolder
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
||||||
import org.springframework.security.web.authentication.logout.LogoutHandler
|
import org.springframework.security.web.authentication.logout.LogoutHandler
|
||||||
@ -300,7 +303,7 @@ class LogoutDslTests {
|
|||||||
open class CustomLogoutHandlerConfig : WebSecurityConfigurerAdapter() {
|
open class CustomLogoutHandlerConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val HANDLER: LogoutHandler = LogoutHandler { _, _, _ -> }
|
val HANDLER: LogoutHandler = NoopLogoutHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -311,4 +314,13 @@ class LogoutDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopLogoutHandler: LogoutHandler {
|
||||||
|
override fun logout(
|
||||||
|
request: HttpServletRequest?,
|
||||||
|
response: HttpServletResponse?,
|
||||||
|
authentication: Authentication?
|
||||||
|
) { }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur
|
|||||||
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
||||||
@ -123,9 +124,7 @@ class OAuth2ClientDslTests {
|
|||||||
val REQUEST_REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
val REQUEST_REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
||||||
HttpSessionOAuth2AuthorizationRequestRepository()
|
HttpSessionOAuth2AuthorizationRequestRepository()
|
||||||
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
||||||
OAuth2AccessTokenResponseClient {
|
DefaultAuthorizationCodeTokenResponseClient()
|
||||||
OAuth2AccessTokenResponse.withToken("some tokenValue").build()
|
|
||||||
}
|
|
||||||
val CLIENT_REPOSITORY: OAuth2AuthorizedClientRepository = HttpSessionOAuth2AuthorizedClientRepository()
|
val CLIENT_REPOSITORY: OAuth2AuthorizedClientRepository = HttpSessionOAuth2AuthorizedClientRepository()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package org.springframework.security.config.annotation.web
|
package org.springframework.security.config.annotation.web
|
||||||
|
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
import io.mockk.mockkObject
|
import io.mockk.mockkObject
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@ -43,6 +44,7 @@ import org.springframework.test.web.servlet.post
|
|||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
import jakarta.servlet.http.HttpServletRequest
|
import jakarta.servlet.http.HttpServletRequest
|
||||||
|
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for [OAuth2LoginDsl]
|
* Tests for [OAuth2LoginDsl]
|
||||||
@ -131,7 +133,7 @@ class OAuth2LoginDslTests {
|
|||||||
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE)
|
||||||
every {
|
every {
|
||||||
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
CustomAuthenticationDetailsSourceConfig.AUTHENTICATION_DETAILS_SOURCE.buildDetails(any())
|
||||||
} returns Any()
|
} returns mockk()
|
||||||
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHORIZATION_REQUEST_REPOSITORY)
|
mockkObject(CustomAuthenticationDetailsSourceConfig.AUTHORIZATION_REQUEST_REPOSITORY)
|
||||||
every {
|
every {
|
||||||
CustomAuthenticationDetailsSourceConfig.AUTHORIZATION_REQUEST_REPOSITORY.removeAuthorizationRequest(any(), any())
|
CustomAuthenticationDetailsSourceConfig.AUTHORIZATION_REQUEST_REPOSITORY.removeAuthorizationRequest(any(), any())
|
||||||
@ -158,8 +160,7 @@ class OAuth2LoginDslTests {
|
|||||||
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
open class CustomAuthenticationDetailsSourceConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_DETAILS_SOURCE: AuthenticationDetailsSource<HttpServletRequest, *> =
|
val AUTHENTICATION_DETAILS_SOURCE = WebAuthenticationDetailsSource()
|
||||||
AuthenticationDetailsSource<HttpServletRequest, Any> { Any() }
|
|
||||||
val AUTHORIZATION_REQUEST_REPOSITORY = HttpSessionOAuth2AuthorizationRequestRepository()
|
val AUTHORIZATION_REQUEST_REPOSITORY = HttpSessionOAuth2AuthorizationRequestRepository()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,9 +27,9 @@ import org.junit.jupiter.api.extension.ExtendWith
|
|||||||
import org.springframework.beans.factory.BeanCreationException
|
import org.springframework.beans.factory.BeanCreationException
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.security.authentication.AuthenticationManager
|
import org.springframework.security.authentication.AuthenticationManager
|
||||||
import org.springframework.security.authentication.AuthenticationManagerResolver
|
import org.springframework.security.authentication.AuthenticationManagerResolver
|
||||||
import org.springframework.security.authentication.TestingAuthenticationToken
|
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
|
||||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
|
||||||
@ -39,10 +39,13 @@ import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames.SUB
|
|||||||
import org.springframework.security.oauth2.jwt.Jwt
|
import org.springframework.security.oauth2.jwt.Jwt
|
||||||
import org.springframework.security.oauth2.jwt.JwtDecoder
|
import org.springframework.security.oauth2.jwt.JwtDecoder
|
||||||
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken
|
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtIssuerAuthenticationManagerResolver
|
||||||
import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver
|
import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver
|
||||||
import org.springframework.security.oauth2.server.resource.web.DefaultBearerTokenResolver
|
import org.springframework.security.oauth2.server.resource.web.DefaultBearerTokenResolver
|
||||||
import org.springframework.security.web.AuthenticationEntryPoint
|
import org.springframework.security.web.AuthenticationEntryPoint
|
||||||
import org.springframework.security.web.access.AccessDeniedHandler
|
import org.springframework.security.web.access.AccessDeniedHandler
|
||||||
|
import org.springframework.security.web.access.AccessDeniedHandlerImpl
|
||||||
|
import org.springframework.security.web.authentication.HttpStatusEntryPoint
|
||||||
import org.springframework.test.web.servlet.MockMvc
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
import org.springframework.test.web.servlet.get
|
import org.springframework.test.web.servlet.get
|
||||||
|
|
||||||
@ -79,7 +82,7 @@ class OAuth2ResourceServerDslTests {
|
|||||||
open class EntryPointConfig : WebSecurityConfigurerAdapter() {
|
open class EntryPointConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val ENTRY_POINT: AuthenticationEntryPoint = AuthenticationEntryPoint { _, _, _ -> }
|
val ENTRY_POINT: AuthenticationEntryPoint = HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -116,12 +119,7 @@ class OAuth2ResourceServerDslTests {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val RESOLVER: BearerTokenResolver = DefaultBearerTokenResolver()
|
val RESOLVER: BearerTokenResolver = DefaultBearerTokenResolver()
|
||||||
val DECODER: JwtDecoder = JwtDecoder {
|
val DECODER: JwtDecoder = MockJwtDecoder()
|
||||||
Jwt.withTokenValue("token")
|
|
||||||
.header("alg", "none")
|
|
||||||
.claim(SUB, "user")
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -140,6 +138,16 @@ class OAuth2ResourceServerDslTests {
|
|||||||
open fun jwtDecoder(): JwtDecoder = DECODER
|
open fun jwtDecoder(): JwtDecoder = DECODER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MockJwtDecoder: JwtDecoder {
|
||||||
|
override fun decode(token: String?): Jwt {
|
||||||
|
return Jwt.withTokenValue("token")
|
||||||
|
.header("alg", "none")
|
||||||
|
.claim(SUB, "user")
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `oauth2Resource server when custom access denied handler then handler used`() {
|
fun `oauth2Resource server when custom access denied handler then handler used`() {
|
||||||
this.spring.register(AccessDeniedHandlerConfig::class.java).autowire()
|
this.spring.register(AccessDeniedHandlerConfig::class.java).autowire()
|
||||||
@ -163,13 +171,8 @@ class OAuth2ResourceServerDslTests {
|
|||||||
open class AccessDeniedHandlerConfig : WebSecurityConfigurerAdapter() {
|
open class AccessDeniedHandlerConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val DECODER: JwtDecoder = JwtDecoder { _ ->
|
val DECODER: JwtDecoder = MockJwtDecoder()
|
||||||
Jwt.withTokenValue("token")
|
val DENIED_HANDLER: AccessDeniedHandler = AccessDeniedHandlerImpl()
|
||||||
.header("alg", "none")
|
|
||||||
.claim(SUB, "user")
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
val DENIED_HANDLER: AccessDeniedHandler = AccessDeniedHandler { _, _, _ -> }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -210,11 +213,7 @@ class OAuth2ResourceServerDslTests {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val RESOLVER: AuthenticationManagerResolver<HttpServletRequest> =
|
val RESOLVER: AuthenticationManagerResolver<HttpServletRequest> =
|
||||||
AuthenticationManagerResolver {
|
JwtIssuerAuthenticationManagerResolver("issuer")
|
||||||
AuthenticationManager {
|
|
||||||
TestingAuthenticationToken("a,", "b", "c")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -41,12 +41,14 @@ import org.springframework.security.core.userdetails.User
|
|||||||
import org.springframework.security.core.userdetails.UserDetailsService
|
import org.springframework.security.core.userdetails.UserDetailsService
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder
|
import org.springframework.security.crypto.password.PasswordEncoder
|
||||||
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf
|
||||||
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers
|
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers
|
||||||
import org.springframework.security.web.authentication.AuthenticationSuccessHandler
|
import org.springframework.security.web.authentication.AuthenticationSuccessHandler
|
||||||
import org.springframework.security.web.authentication.NullRememberMeServices
|
import org.springframework.security.web.authentication.NullRememberMeServices
|
||||||
import org.springframework.security.web.authentication.RememberMeServices
|
import org.springframework.security.web.authentication.RememberMeServices
|
||||||
|
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
|
||||||
import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices
|
import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices
|
||||||
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository
|
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher
|
||||||
@ -438,7 +440,7 @@ internal class RememberMeDslTests {
|
|||||||
open class RememberMeSuccessHandlerConfig : DefaultUserConfig() {
|
open class RememberMeSuccessHandlerConfig : DefaultUserConfig() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val SUCCESS_HANDLER: AuthenticationSuccessHandler = AuthenticationSuccessHandler { _ , _, _ -> }
|
val SUCCESS_HANDLER: AuthenticationSuccessHandler = SimpleUrlAuthenticationSuccessHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -549,9 +551,9 @@ internal class RememberMeDslTests {
|
|||||||
open class RememberMeDefaultUserDetailsServiceConfig : DefaultUserConfig() {
|
open class RememberMeDefaultUserDetailsServiceConfig : DefaultUserConfig() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val USER_DETAIL_SERVICE: UserDetailsService = UserDetailsService { _ ->
|
val USER_DETAIL_SERVICE: UserDetailsService = InMemoryUserDetailsManager(
|
||||||
User("username", "password", emptyList())
|
User("username", "password", emptyList())
|
||||||
}
|
)
|
||||||
val PASSWORD_ENCODER: PasswordEncoder = BCryptPasswordEncoder()
|
val PASSWORD_ENCODER: PasswordEncoder = BCryptPasswordEncoder()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,9 +577,9 @@ internal class RememberMeDslTests {
|
|||||||
open class RememberMeUserDetailsServiceConfig : DefaultUserConfig() {
|
open class RememberMeUserDetailsServiceConfig : DefaultUserConfig() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val USER_DETAIL_SERVICE: UserDetailsService = UserDetailsService { _ ->
|
val USER_DETAIL_SERVICE: UserDetailsService = InMemoryUserDetailsManager(
|
||||||
User("username", "password", emptyList())
|
User("username", "password", emptyList())
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -36,6 +36,7 @@ import org.springframework.security.config.test.SpringTestContextExtension
|
|||||||
import org.springframework.security.core.Authentication
|
import org.springframework.security.core.Authentication
|
||||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication
|
||||||
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler
|
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler
|
||||||
|
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy
|
||||||
import org.springframework.security.web.authentication.session.SessionAuthenticationException
|
import org.springframework.security.web.authentication.session.SessionAuthenticationException
|
||||||
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
|
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
|
||||||
import org.springframework.security.web.session.SimpleRedirectInvalidSessionStrategy
|
import org.springframework.security.web.session.SimpleRedirectInvalidSessionStrategy
|
||||||
@ -210,7 +211,7 @@ class SessionManagementDslTests {
|
|||||||
open class SessionAuthenticationStrategyConfig : WebSecurityConfigurerAdapter() {
|
open class SessionAuthenticationStrategyConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val STRATEGY: SessionAuthenticationStrategy = SessionAuthenticationStrategy { _, _, _ -> }
|
val STRATEGY: SessionAuthenticationStrategy = NullAuthenticatedSessionStrategy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -32,6 +32,7 @@ import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
|||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
import org.springframework.security.config.annotation.web.invoke
|
import org.springframework.security.config.annotation.web.invoke
|
||||||
|
import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
||||||
@ -134,9 +135,7 @@ class AuthorizationCodeGrantDslTests {
|
|||||||
val REQUEST_REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
val REQUEST_REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
||||||
HttpSessionOAuth2AuthorizationRequestRepository()
|
HttpSessionOAuth2AuthorizationRequestRepository()
|
||||||
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
||||||
OAuth2AccessTokenResponseClient {
|
DefaultAuthorizationCodeTokenResponseClient()
|
||||||
OAuth2AccessTokenResponse.withToken("some tokenValue").build()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -31,6 +31,7 @@ import org.springframework.security.config.test.SpringTestContext
|
|||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
import org.springframework.security.config.annotation.web.invoke
|
import org.springframework.security.config.annotation.web.invoke
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority
|
import org.springframework.security.core.authority.SimpleGrantedAuthority
|
||||||
|
import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
||||||
@ -108,9 +109,7 @@ class RedirectionEndpointDslTests {
|
|||||||
val REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
val REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
||||||
HttpSessionOAuth2AuthorizationRequestRepository()
|
HttpSessionOAuth2AuthorizationRequestRepository()
|
||||||
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
||||||
OAuth2AccessTokenResponseClient {
|
DefaultAuthorizationCodeTokenResponseClient()
|
||||||
OAuth2AccessTokenResponse.withToken("some tokenValue").build()
|
|
||||||
}
|
|
||||||
val USER_SERVICE: OAuth2UserService<OAuth2UserRequest, OAuth2User> = DefaultOAuth2UserService()
|
val USER_SERVICE: OAuth2UserService<OAuth2UserRequest, OAuth2User> = DefaultOAuth2UserService()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
|||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
import org.springframework.security.config.annotation.web.invoke
|
import org.springframework.security.config.annotation.web.invoke
|
||||||
|
import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient
|
||||||
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
|
||||||
@ -99,9 +100,7 @@ class TokenEndpointDslTests {
|
|||||||
val REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
val REPOSITORY: AuthorizationRequestRepository<OAuth2AuthorizationRequest> =
|
||||||
HttpSessionOAuth2AuthorizationRequestRepository()
|
HttpSessionOAuth2AuthorizationRequestRepository()
|
||||||
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
val CLIENT: OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> =
|
||||||
OAuth2AccessTokenResponseClient {
|
DefaultAuthorizationCodeTokenResponseClient()
|
||||||
OAuth2AccessTokenResponse.withToken("some tokenValue").build()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -130,10 +130,8 @@ class JwtDslTests {
|
|||||||
open class CustomJwtAuthenticationConverterConfig : WebSecurityConfigurerAdapter() {
|
open class CustomJwtAuthenticationConverterConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CONVERTER: Converter<Jwt, out AbstractAuthenticationToken> = Converter { _ ->
|
val CONVERTER: Converter<Jwt, out AbstractAuthenticationToken> = MockConverter()
|
||||||
TestingAuthenticationToken("a", "b", "c")
|
val DECODER: JwtDecoder = MockJwtDecoder()
|
||||||
}
|
|
||||||
val DECODER: JwtDecoder = JwtDecoder { Jwt.withTokenValue("some tokenValue").build() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -153,6 +151,12 @@ class JwtDslTests {
|
|||||||
open fun jwtDecoder(): JwtDecoder = DECODER
|
open fun jwtDecoder(): JwtDecoder = DECODER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MockConverter: Converter<Jwt, AbstractAuthenticationToken> {
|
||||||
|
override fun convert(source: Jwt): AbstractAuthenticationToken {
|
||||||
|
return TestingAuthenticationToken("a", "b", "c")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `JWT when custom JWT decoder set after jwkSetUri then decoder used`() {
|
fun `JWT when custom JWT decoder set after jwkSetUri then decoder used`() {
|
||||||
this.spring.register(JwtDecoderAfterJwkSetUriConfig::class.java).autowire()
|
this.spring.register(JwtDecoderAfterJwkSetUriConfig::class.java).autowire()
|
||||||
@ -175,7 +179,7 @@ class JwtDslTests {
|
|||||||
open class JwtDecoderAfterJwkSetUriConfig : WebSecurityConfigurerAdapter() {
|
open class JwtDecoderAfterJwkSetUriConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val DECODER: JwtDecoder = JwtDecoder { Jwt.withTokenValue("some tokenValue").build() }
|
val DECODER: JwtDecoder = MockJwtDecoder()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -193,6 +197,12 @@ class JwtDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MockJwtDecoder: JwtDecoder {
|
||||||
|
override fun decode(token: String?): Jwt {
|
||||||
|
return Jwt.withTokenValue("some tokenValue").build()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `JWT when custom authentication manager configured then used`() {
|
fun `JWT when custom authentication manager configured then used`() {
|
||||||
this.spring.register(AuthenticationManagerConfig::class.java, AuthenticationController::class.java).autowire()
|
this.spring.register(AuthenticationManagerConfig::class.java, AuthenticationController::class.java).autowire()
|
||||||
|
@ -43,6 +43,7 @@ import org.springframework.security.oauth2.jwt.JwtClaimNames
|
|||||||
import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication
|
import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication
|
||||||
import org.springframework.security.oauth2.server.resource.introspection.NimbusOpaqueTokenIntrospector
|
import org.springframework.security.oauth2.server.resource.introspection.NimbusOpaqueTokenIntrospector
|
||||||
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector
|
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector
|
||||||
|
import org.springframework.security.oauth2.server.resource.introspection.SpringOpaqueTokenIntrospector
|
||||||
import org.springframework.test.web.servlet.MockMvc
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
import org.springframework.test.web.servlet.get
|
import org.springframework.test.web.servlet.get
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
@ -147,9 +148,7 @@ class OpaqueTokenDslTests {
|
|||||||
open class CustomIntrospectorConfig : WebSecurityConfigurerAdapter() {
|
open class CustomIntrospectorConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val INTROSPECTOR: OpaqueTokenIntrospector = OpaqueTokenIntrospector {
|
val INTROSPECTOR: OpaqueTokenIntrospector = SpringOpaqueTokenIntrospector("uri", "clientId", "clientSecret")
|
||||||
DefaultOAuth2AuthenticatedPrincipal(emptyMap(), emptyList())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
@ -185,9 +184,7 @@ class OpaqueTokenDslTests {
|
|||||||
open class IntrospectorAfterClientCredentialsConfig : WebSecurityConfigurerAdapter() {
|
open class IntrospectorAfterClientCredentialsConfig : WebSecurityConfigurerAdapter() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val INTROSPECTOR: OpaqueTokenIntrospector = OpaqueTokenIntrospector {
|
val INTROSPECTOR: OpaqueTokenIntrospector = SpringOpaqueTokenIntrospector("uri", "clientId", "clientSecret")
|
||||||
DefaultOAuth2AuthenticatedPrincipal(emptyMap(), emptyList())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(http: HttpSecurity) {
|
override fun configure(http: HttpSecurity) {
|
||||||
|
@ -24,11 +24,13 @@ import org.junit.jupiter.api.extension.ExtendWith
|
|||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.context.ApplicationContext
|
import org.springframework.context.ApplicationContext
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.http.MediaType
|
import org.springframework.http.MediaType
|
||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
|
import org.springframework.security.web.server.authorization.HttpStatusServerAccessDeniedHandler
|
||||||
import org.springframework.security.web.server.authorization.ServerAccessDeniedHandler
|
import org.springframework.security.web.server.authorization.ServerAccessDeniedHandler
|
||||||
import org.springframework.security.web.server.csrf.CsrfToken
|
import org.springframework.security.web.server.csrf.CsrfToken
|
||||||
import org.springframework.security.web.server.csrf.DefaultCsrfToken
|
import org.springframework.security.web.server.csrf.DefaultCsrfToken
|
||||||
@ -175,7 +177,7 @@ class ServerCsrfDslTests {
|
|||||||
@EnableWebFlux
|
@EnableWebFlux
|
||||||
open class CustomAccessDeniedHandlerConfig {
|
open class CustomAccessDeniedHandlerConfig {
|
||||||
companion object {
|
companion object {
|
||||||
val ACCESS_DENIED_HANDLER: ServerAccessDeniedHandler = ServerAccessDeniedHandler { _, _ -> Mono.empty() }
|
val ACCESS_DENIED_HANDLER: ServerAccessDeniedHandler = HttpStatusServerAccessDeniedHandler(HttpStatus.FORBIDDEN)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -30,6 +30,7 @@ import org.springframework.security.authentication.ReactiveAuthenticationManager
|
|||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.core.Authentication
|
||||||
import org.springframework.security.core.userdetails.MapReactiveUserDetailsService
|
import org.springframework.security.core.userdetails.MapReactiveUserDetailsService
|
||||||
import org.springframework.security.core.userdetails.User
|
import org.springframework.security.core.userdetails.User
|
||||||
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf
|
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf
|
||||||
@ -151,7 +152,7 @@ class ServerFormLoginDslTests {
|
|||||||
open class CustomAuthenticationManagerConfig {
|
open class CustomAuthenticationManagerConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = ReactiveAuthenticationManager { Mono.empty() }
|
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = NoopReactiveAuthenticationManager()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -167,6 +168,12 @@ class ServerFormLoginDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopReactiveAuthenticationManager: ReactiveAuthenticationManager {
|
||||||
|
override fun authenticate(authentication: Authentication?): Mono<Authentication> {
|
||||||
|
return Mono.empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `form login when custom authentication entry point then entry point used`() {
|
fun `form login when custom authentication entry point then entry point used`() {
|
||||||
this.spring.register(CustomConfig::class.java, UserDetailsConfig::class.java).autowire()
|
this.spring.register(CustomConfig::class.java, UserDetailsConfig::class.java).autowire()
|
||||||
|
@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired
|
|||||||
import org.springframework.context.ApplicationContext
|
import org.springframework.context.ApplicationContext
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.security.authentication.ReactiveAuthenticationManager
|
import org.springframework.security.authentication.ReactiveAuthenticationManager
|
||||||
import org.springframework.security.authentication.TestingAuthenticationToken
|
import org.springframework.security.authentication.TestingAuthenticationToken
|
||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
@ -36,6 +37,7 @@ import org.springframework.security.core.userdetails.MapReactiveUserDetailsServi
|
|||||||
import org.springframework.security.core.userdetails.User
|
import org.springframework.security.core.userdetails.User
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
import org.springframework.security.web.server.ServerAuthenticationEntryPoint
|
import org.springframework.security.web.server.ServerAuthenticationEntryPoint
|
||||||
|
import org.springframework.security.web.server.authentication.HttpStatusServerEntryPoint
|
||||||
import org.springframework.security.web.server.context.ServerSecurityContextRepository
|
import org.springframework.security.web.server.context.ServerSecurityContextRepository
|
||||||
import org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository
|
import org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient
|
import org.springframework.test.web.reactive.server.WebTestClient
|
||||||
@ -127,7 +129,7 @@ class ServerHttpBasicDslTests {
|
|||||||
open class CustomAuthenticationManagerConfig {
|
open class CustomAuthenticationManagerConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = ReactiveAuthenticationManager { Mono.empty() }
|
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = NoopReactiveAuthenticationManager()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -143,6 +145,12 @@ class ServerHttpBasicDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopReactiveAuthenticationManager: ReactiveAuthenticationManager {
|
||||||
|
override fun authenticate(authentication: Authentication?): Mono<Authentication> {
|
||||||
|
return Mono.empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `http basic when custom security context repository then repository used`() {
|
fun `http basic when custom security context repository then repository used`() {
|
||||||
this.spring.register(CustomSecurityContextRepositoryConfig::class.java, UserDetailsConfig::class.java).autowire()
|
this.spring.register(CustomSecurityContextRepositoryConfig::class.java, UserDetailsConfig::class.java).autowire()
|
||||||
@ -200,7 +208,7 @@ class ServerHttpBasicDslTests {
|
|||||||
open class CustomAuthenticationEntryPointConfig {
|
open class CustomAuthenticationEntryPointConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val ENTRY_POINT: ServerAuthenticationEntryPoint = ServerAuthenticationEntryPoint { _, _ -> Mono.empty() }
|
val ENTRY_POINT: ServerAuthenticationEntryPoint = HttpStatusServerEntryPoint(HttpStatus.UNAUTHORIZED)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -31,6 +31,7 @@ import org.springframework.security.authentication.TestingAuthenticationToken
|
|||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.core.Authentication
|
||||||
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter
|
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
import org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter
|
import org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter
|
||||||
@ -223,7 +224,7 @@ class ServerHttpSecurityDslTests {
|
|||||||
@EnableWebFluxSecurity
|
@EnableWebFluxSecurity
|
||||||
open class AuthenticationManagerConfig {
|
open class AuthenticationManagerConfig {
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = ReactiveAuthenticationManager { Mono.empty() }
|
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = NoopReactiveAuthenticationManager()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -237,4 +238,10 @@ class ServerHttpSecurityDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopReactiveAuthenticationManager: ReactiveAuthenticationManager {
|
||||||
|
override fun authenticate(authentication: Authentication?): Mono<Authentication> {
|
||||||
|
return Mono.empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ class ServerJwtDslTests {
|
|||||||
open class CustomDecoderConfig {
|
open class CustomDecoderConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val JWT_DECODER: ReactiveJwtDecoder = ReactiveJwtDecoder { Mono.empty() }
|
val JWT_DECODER: ReactiveJwtDecoder = NullReactiveJwtDecoder()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -164,6 +164,12 @@ class ServerJwtDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NullReactiveJwtDecoder: ReactiveJwtDecoder {
|
||||||
|
override fun decode(token: String?): Mono<Jwt> {
|
||||||
|
return Mono.empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `jwt when using custom JWK Set URI then custom URI used`() {
|
fun `jwt when using custom JWK Set URI then custom URI used`() {
|
||||||
this.spring.register(CustomJwkSetUriConfig::class.java).autowire()
|
this.spring.register(CustomJwkSetUriConfig::class.java).autowire()
|
||||||
@ -242,7 +248,7 @@ class ServerJwtDslTests {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CONVERTER: Converter<Jwt, out Mono<AbstractAuthenticationToken>> = Converter { Mono.empty() }
|
val CONVERTER: Converter<Jwt, out Mono<AbstractAuthenticationToken>> = Converter { Mono.empty() }
|
||||||
val DECODER: ReactiveJwtDecoder = ReactiveJwtDecoder { Mono.empty() }
|
val DECODER: ReactiveJwtDecoder = NullReactiveJwtDecoder()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -25,11 +25,14 @@ import org.junit.jupiter.api.extension.ExtendWith
|
|||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.context.ApplicationContext
|
import org.springframework.context.ApplicationContext
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf
|
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
|
import org.springframework.security.web.server.authentication.logout.HttpStatusReturningServerLogoutSuccessHandler
|
||||||
|
import org.springframework.security.web.server.authentication.logout.SecurityContextServerLogoutHandler
|
||||||
import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler
|
import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler
|
||||||
import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler
|
import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler
|
||||||
import org.springframework.security.web.server.util.matcher.PathPatternParserServerWebExchangeMatcher
|
import org.springframework.security.web.server.util.matcher.PathPatternParserServerWebExchangeMatcher
|
||||||
@ -171,7 +174,7 @@ class ServerLogoutDslTests {
|
|||||||
open class CustomLogoutHandlerConfig {
|
open class CustomLogoutHandlerConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val LOGOUT_HANDLER: ServerLogoutHandler = ServerLogoutHandler { _, _ -> Mono.empty() }
|
val LOGOUT_HANDLER: ServerLogoutHandler = SecurityContextServerLogoutHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -206,7 +209,7 @@ class ServerLogoutDslTests {
|
|||||||
open class CustomLogoutSuccessHandlerConfig {
|
open class CustomLogoutSuccessHandlerConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val LOGOUT_HANDLER: ServerLogoutSuccessHandler = ServerLogoutSuccessHandler { _, _ -> Mono.empty() }
|
val LOGOUT_HANDLER: ServerLogoutSuccessHandler = HttpStatusReturningServerLogoutSuccessHandler(HttpStatus.OK)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -31,12 +31,14 @@ import org.springframework.security.config.annotation.web.reactive.EnableWebFlux
|
|||||||
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
import org.springframework.security.config.oauth2.client.CommonOAuth2Provider
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.core.Authentication
|
||||||
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.InMemoryReactiveClientRegistrationRepository
|
||||||
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository
|
import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository
|
||||||
import org.springframework.security.oauth2.client.web.server.ServerAuthorizationRequestRepository
|
import org.springframework.security.oauth2.client.web.server.ServerAuthorizationRequestRepository
|
||||||
import org.springframework.security.oauth2.client.web.server.WebSessionOAuth2ServerAuthorizationRequestRepository
|
import org.springframework.security.oauth2.client.web.server.WebSessionOAuth2ServerAuthorizationRequestRepository
|
||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
|
||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames
|
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames
|
||||||
|
import org.springframework.security.oauth2.server.resource.web.server.ServerBearerTokenAuthenticationConverter
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
import org.springframework.security.web.server.authentication.ServerAuthenticationConverter
|
import org.springframework.security.web.server.authentication.ServerAuthenticationConverter
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient
|
import org.springframework.test.web.reactive.server.WebTestClient
|
||||||
@ -162,7 +164,7 @@ class ServerOAuth2ClientDslTests {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHORIZATION_REQUEST_REPOSITORY: ServerAuthorizationRequestRepository<OAuth2AuthorizationRequest> = WebSessionOAuth2ServerAuthorizationRequestRepository()
|
val AUTHORIZATION_REQUEST_REPOSITORY: ServerAuthorizationRequestRepository<OAuth2AuthorizationRequest> = WebSessionOAuth2ServerAuthorizationRequestRepository()
|
||||||
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerAuthenticationConverter { Mono.empty() }
|
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerBearerTokenAuthenticationConverter()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -214,8 +216,8 @@ class ServerOAuth2ClientDslTests {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHORIZATION_REQUEST_REPOSITORY: ServerAuthorizationRequestRepository<OAuth2AuthorizationRequest> = WebSessionOAuth2ServerAuthorizationRequestRepository()
|
val AUTHORIZATION_REQUEST_REPOSITORY: ServerAuthorizationRequestRepository<OAuth2AuthorizationRequest> = WebSessionOAuth2ServerAuthorizationRequestRepository()
|
||||||
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerAuthenticationConverter { Mono.empty() }
|
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerBearerTokenAuthenticationConverter()
|
||||||
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = ReactiveAuthenticationManager { Mono.empty() }
|
val AUTHENTICATION_MANAGER: ReactiveAuthenticationManager = NoopReactiveAuthenticationManager()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -230,6 +232,12 @@ class ServerOAuth2ClientDslTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NoopReactiveAuthenticationManager: ReactiveAuthenticationManager {
|
||||||
|
override fun authenticate(authentication: Authentication?): Mono<Authentication> {
|
||||||
|
return Mono.empty()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
open class ClientConfig {
|
open class ClientConfig {
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -34,8 +34,10 @@ import org.springframework.security.oauth2.client.registration.ReactiveClientReg
|
|||||||
import org.springframework.security.oauth2.client.web.server.ServerAuthorizationRequestRepository
|
import org.springframework.security.oauth2.client.web.server.ServerAuthorizationRequestRepository
|
||||||
import org.springframework.security.oauth2.client.web.server.WebSessionOAuth2ServerAuthorizationRequestRepository
|
import org.springframework.security.oauth2.client.web.server.WebSessionOAuth2ServerAuthorizationRequestRepository
|
||||||
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
|
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
|
||||||
|
import org.springframework.security.oauth2.server.resource.web.server.ServerBearerTokenAuthenticationConverter
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
import org.springframework.security.web.server.authentication.ServerAuthenticationConverter
|
import org.springframework.security.web.server.authentication.ServerAuthenticationConverter
|
||||||
|
import org.springframework.security.web.server.util.matcher.IpAddressServerWebExchangeMatcher
|
||||||
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher
|
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient
|
import org.springframework.test.web.reactive.server.WebTestClient
|
||||||
import org.springframework.web.reactive.config.EnableWebFlux
|
import org.springframework.web.reactive.config.EnableWebFlux
|
||||||
@ -159,7 +161,7 @@ class ServerOAuth2LoginDslTests {
|
|||||||
open class AuthenticationMatcherConfig {
|
open class AuthenticationMatcherConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_MATCHER: ServerWebExchangeMatcher = ServerWebExchangeMatcher { Mono.empty() }
|
val AUTHENTICATION_MATCHER: ServerWebExchangeMatcher = IpAddressServerWebExchangeMatcher("127.0.0.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -192,7 +194,7 @@ class ServerOAuth2LoginDslTests {
|
|||||||
open class AuthenticationConverterConfig {
|
open class AuthenticationConverterConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerAuthenticationConverter { Mono.empty() }
|
val AUTHENTICATION_CONVERTER: ServerAuthenticationConverter = ServerBearerTokenAuthenticationConverter()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -33,6 +33,7 @@ import org.springframework.security.authentication.ReactiveAuthenticationManager
|
|||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity
|
||||||
import org.springframework.security.config.test.SpringTestContext
|
import org.springframework.security.config.test.SpringTestContext
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension
|
import org.springframework.security.config.test.SpringTestContextExtension
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtIssuerReactiveAuthenticationManagerResolver
|
||||||
import org.springframework.security.oauth2.server.resource.web.server.ServerBearerTokenAuthenticationConverter
|
import org.springframework.security.oauth2.server.resource.web.server.ServerBearerTokenAuthenticationConverter
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain
|
import org.springframework.security.web.server.SecurityWebFilterChain
|
||||||
import org.springframework.security.web.server.authentication.HttpStatusServerEntryPoint
|
import org.springframework.security.web.server.authentication.HttpStatusServerEntryPoint
|
||||||
@ -186,7 +187,7 @@ class ServerOAuth2ResourceServerDslTests {
|
|||||||
open class AuthenticationManagerResolverConfig {
|
open class AuthenticationManagerResolverConfig {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val RESOLVER: ReactiveAuthenticationManagerResolver<ServerWebExchange> = ReactiveAuthenticationManagerResolver { Mono.empty() }
|
val RESOLVER: ReactiveAuthenticationManagerResolver<ServerWebExchange> = JwtIssuerReactiveAuthenticationManagerResolver("issuer")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
Loading…
x
Reference in New Issue
Block a user