mirror of
https://github.com/spring-projects/spring-security.git
synced 2026-02-08 22:44:35 +00:00
Add compile-warnings-error
Closes gh-18424 Signed-off-by: Tran Ngoc Nhan <ngocnhan.tran1996@gmail.com>
This commit is contained in:
parent
d244bcf76e
commit
8bafd94b1f
@ -5,6 +5,7 @@ plugins {
|
||||
id 'security-kotlin'
|
||||
id 'java-toolchain'
|
||||
id 'test-compile-target-jdk25'
|
||||
id 'compile-warnings-error'
|
||||
}
|
||||
|
||||
apply plugin: 'io.spring.convention.docs'
|
||||
|
||||
@ -15,7 +15,7 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationFa
|
||||
import org.springframework.security.web.authentication.password.HaveIBeenPwnedRestApiPasswordChecker
|
||||
|
||||
|
||||
class CompromisedPasswordCheckerUsage {
|
||||
open class CompromisedPasswordCheckerUsage {
|
||||
// tag::configuration[]
|
||||
@Bean
|
||||
open fun filterChain(http: HttpSecurity): SecurityFilterChain {
|
||||
|
||||
@ -4,6 +4,8 @@ import org.springframework.security.core.userdetails.User
|
||||
import org.springframework.security.core.userdetails.UserDetails
|
||||
|
||||
class WithDefaultPasswordEncoderUsage {
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun createSingleUser(): UserDetails {
|
||||
// tag::createSingleUser[]
|
||||
val user = User.withDefaultPasswordEncoder()
|
||||
@ -17,6 +19,7 @@ class WithDefaultPasswordEncoderUsage {
|
||||
return user
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun createMultipleUsers(): List<UserDetails> {
|
||||
// tag::createMultipleUsers[]
|
||||
val users = User.withDefaultPasswordEncoder()
|
||||
|
||||
@ -4,10 +4,8 @@ import org.springframework.security.crypto.argon2.Argon2PasswordEncoder
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
|
||||
import org.springframework.security.crypto.factory.PasswordEncoderFactories
|
||||
import org.springframework.security.crypto.password.DelegatingPasswordEncoder
|
||||
import org.springframework.security.crypto.password.NoOpPasswordEncoder
|
||||
import org.springframework.security.crypto.password.PasswordEncoder
|
||||
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder
|
||||
import org.springframework.security.crypto.password.StandardPasswordEncoder
|
||||
import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder
|
||||
|
||||
class DelegatingPasswordEncoderUsage {
|
||||
@ -18,19 +16,20 @@ class DelegatingPasswordEncoderUsage {
|
||||
return passwordEncoder
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun customDelegatingPasswordEncoder(): PasswordEncoder {
|
||||
// tag::createCustomPasswordEncoder[]
|
||||
val idForEncode = "bcrypt"
|
||||
val encoders: MutableMap<String, PasswordEncoder> = mutableMapOf()
|
||||
encoders[idForEncode] = BCryptPasswordEncoder()
|
||||
encoders["noop"] = NoOpPasswordEncoder.getInstance()
|
||||
encoders["noop"] = org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance()
|
||||
encoders["pbkdf2"] = Pbkdf2PasswordEncoder.defaultsForSpringSecurity_v5_5()
|
||||
encoders["pbkdf2@SpringSecurity_v5_8"] = Pbkdf2PasswordEncoder.defaultsForSpringSecurity_v5_8()
|
||||
encoders["scrypt"] = SCryptPasswordEncoder.defaultsForSpringSecurity_v4_1()
|
||||
encoders["scrypt@SpringSecurity_v5_8"] = SCryptPasswordEncoder.defaultsForSpringSecurity_v5_8()
|
||||
encoders["argon2"] = Argon2PasswordEncoder.defaultsForSpringSecurity_v5_2()
|
||||
encoders["argon2@SpringSecurity_v5_8"] = Argon2PasswordEncoder.defaultsForSpringSecurity_v5_8()
|
||||
encoders["sha256"] = StandardPasswordEncoder()
|
||||
encoders["sha256"] = org.springframework.security.crypto.password.StandardPasswordEncoder()
|
||||
|
||||
val passwordEncoder: PasswordEncoder = DelegatingPasswordEncoder(idForEncode, encoders)
|
||||
// end::createCustomPasswordEncoder[]
|
||||
|
||||
@ -19,8 +19,6 @@ import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.core.io.ClassPathResource
|
||||
import org.springframework.http.client.reactive.ClientHttpConnector
|
||||
import org.springframework.http.server.reactive.SslInfo
|
||||
import org.springframework.security.config.test.SpringTestContext
|
||||
import org.springframework.security.config.test.SpringTestContextExtension
|
||||
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers
|
||||
@ -28,17 +26,10 @@ import org.springframework.security.test.web.reactive.server.WebTestClientBuilde
|
||||
import org.springframework.security.web.authentication.preauth.x509.X509TestUtils
|
||||
import org.springframework.test.web.reactive.server.UserWebTestClientConfigurer.x509
|
||||
import org.springframework.test.web.reactive.server.WebTestClient
|
||||
import org.springframework.test.web.reactive.server.WebTestClientConfigurer
|
||||
import org.springframework.util.Assert
|
||||
import org.springframework.web.server.ServerWebExchange
|
||||
import org.springframework.web.server.WebFilter
|
||||
import org.springframework.web.server.WebFilterChain
|
||||
import org.springframework.web.server.adapter.WebHttpHandlerBuilder
|
||||
import reactor.core.publisher.Mono
|
||||
import java.security.cert.Certificate
|
||||
import java.security.cert.CertificateFactory
|
||||
import java.security.cert.X509Certificate
|
||||
import java.util.function.Consumer
|
||||
|
||||
/**
|
||||
* Tests [CustomX509Configuration].
|
||||
@ -88,9 +79,10 @@ class X509ConfigurationTests {
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private fun <T : Certificate?> loadCert(location: String): T {
|
||||
try {
|
||||
ClassPathResource(location).getInputStream().use { `is` ->
|
||||
ClassPathResource(location).inputStream.use { `is` ->
|
||||
val certFactory = CertificateFactory.getInstance("X.509")
|
||||
return certFactory.generateCertificate(`is`) as T
|
||||
}
|
||||
|
||||
@ -37,8 +37,8 @@ internal class UseAuthorizationManagerFactoryConfiguration {
|
||||
|
||||
// tag::authorizationManagerFactoryBean[]
|
||||
@Bean
|
||||
fun authz(): AuthorizationManagerFactory<Object> {
|
||||
return AuthorizationManagerFactories.multiFactor<Object>()
|
||||
fun authz(): AuthorizationManagerFactory<Any> {
|
||||
return AuthorizationManagerFactories.multiFactor<Any>()
|
||||
.requireFactors(
|
||||
FactorGrantedAuthority.PASSWORD_AUTHORITY,
|
||||
FactorGrantedAuthority.OTT_AUTHORITY
|
||||
@ -47,6 +47,7 @@ internal class UseAuthorizationManagerFactoryConfiguration {
|
||||
}
|
||||
// end::authorizationManagerFactoryBean[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -44,6 +44,7 @@ internal class EnableMultiFactorAuthenticationConfiguration {
|
||||
}
|
||||
// end::httpSecurity[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -38,6 +38,7 @@ internal class ListAuthoritiesConfiguration {
|
||||
}
|
||||
// end::httpSecurity[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -45,6 +45,7 @@ internal class MultipleAuthorizationRulesConfiguration {
|
||||
}
|
||||
// end::httpSecurity[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -53,8 +53,8 @@ internal class MissingAuthorityConfiguration {
|
||||
|
||||
// tag::authorizationManagerFactoryBean[]
|
||||
@Bean
|
||||
fun authz(): AuthorizationManagerFactory<Object> {
|
||||
return AuthorizationManagerFactories.multiFactor<Object>()
|
||||
fun authz(): AuthorizationManagerFactory<Any> {
|
||||
return AuthorizationManagerFactories.multiFactor<Any>()
|
||||
.requireFactors(
|
||||
FactorGrantedAuthority.X509_AUTHORITY,
|
||||
FactorGrantedAuthority.AUTHORIZATION_CODE_AUTHORITY
|
||||
|
||||
@ -42,9 +42,9 @@ internal class AdminMfaAuthorizationManagerConfiguration {
|
||||
|
||||
// tag::authorizationManager[]
|
||||
@Component
|
||||
internal open class AdminMfaAuthorizationManager : AuthorizationManager<Object> {
|
||||
internal open class AdminMfaAuthorizationManager : AuthorizationManager<Any> {
|
||||
override fun authorize(
|
||||
authentication: Supplier<out Authentication?>, context: Object): AuthorizationResult {
|
||||
authentication: Supplier<out Authentication?>, context: Any): AuthorizationResult {
|
||||
return if ("admin" == authentication.get().name) {
|
||||
var admins =
|
||||
AllAuthoritiesAuthorizationManager.hasAllAuthorities<Any>(
|
||||
@ -62,8 +62,8 @@ internal class AdminMfaAuthorizationManagerConfiguration {
|
||||
|
||||
// tag::authorizationManagerFactory[]
|
||||
@Bean
|
||||
fun authorizationManagerFactory(admins: AdminMfaAuthorizationManager): AuthorizationManagerFactory<Object> {
|
||||
val defaults = DefaultAuthorizationManagerFactory<Object>()
|
||||
fun authorizationManagerFactory(admins: AdminMfaAuthorizationManager): AuthorizationManagerFactory<Any> {
|
||||
val defaults = DefaultAuthorizationManagerFactory<Any>()
|
||||
// <1>
|
||||
defaults.setAdditionalAuthorization(admins)
|
||||
// <2>
|
||||
|
||||
@ -16,7 +16,6 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||
import org.springframework.security.web.SecurityFilterChain
|
||||
import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler
|
||||
import org.springframework.security.web.authentication.ott.RedirectOneTimeTokenGenerationSuccessHandler
|
||||
import java.util.List
|
||||
|
||||
@EnableWebSecurity
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ -40,10 +39,10 @@ internal class RequiredAuthoritiesAuthorizationManagerConfiguration {
|
||||
|
||||
// tag::authorizationManager[]
|
||||
@Bean
|
||||
fun adminAuthorization(): RequiredAuthoritiesAuthorizationManager<Object> {
|
||||
fun adminAuthorization(): RequiredAuthoritiesAuthorizationManager<Any> {
|
||||
// <1>
|
||||
val authorities = MapRequiredAuthoritiesRepository()
|
||||
authorities.saveRequiredAuthorities("admin", List.of(
|
||||
authorities.saveRequiredAuthorities("admin", listOf(
|
||||
FactorGrantedAuthority.PASSWORD_AUTHORITY,
|
||||
FactorGrantedAuthority.OTT_AUTHORITY)
|
||||
)
|
||||
@ -55,8 +54,8 @@ internal class RequiredAuthoritiesAuthorizationManagerConfiguration {
|
||||
|
||||
// tag::authorizationManagerFactory[]
|
||||
@Bean
|
||||
fun authorizationManagerFactory(admins: RequiredAuthoritiesAuthorizationManager<Object>): AuthorizationManagerFactory<Object> {
|
||||
val defaults = DefaultAuthorizationManagerFactory<Object>()
|
||||
fun authorizationManagerFactory(admins: RequiredAuthoritiesAuthorizationManager<Any>): AuthorizationManagerFactory<Any> {
|
||||
val defaults = DefaultAuthorizationManagerFactory<Any>()
|
||||
// <1>
|
||||
defaults.setAdditionalAuthorization(admins)
|
||||
// <2>
|
||||
|
||||
@ -34,6 +34,7 @@ class RequireOttConfiguration {
|
||||
}
|
||||
// end::httpSecurity[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -31,6 +31,7 @@ class SimpleConfiguration {
|
||||
}
|
||||
// end::httpSecurity[]
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -3,7 +3,6 @@ package org.springframework.security.kt.docs.servlet.authentication.selectivemfa
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.security.authorization.AuthorizationManagerFactories
|
||||
import org.springframework.security.authorization.AuthorizationManagerFactory
|
||||
import org.springframework.security.config.annotation.authorization.EnableMultiFactorAuthentication
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
|
||||
@ -52,6 +51,7 @@ internal class SelectiveMfaConfiguration {
|
||||
}
|
||||
|
||||
// end::httpSecurity[]
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -3,11 +3,9 @@ package org.springframework.security.kt.docs.servlet.authentication.validduratio
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.security.authorization.AuthorizationManagerFactories
|
||||
import org.springframework.security.authorization.AuthorizationManagerFactory
|
||||
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.invoke
|
||||
import org.springframework.security.core.authority.FactorGrantedAuthority
|
||||
import org.springframework.security.core.userdetails.User
|
||||
import org.springframework.security.core.userdetails.UserDetailsService
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager
|
||||
@ -55,6 +53,7 @@ internal class ValidDurationConfiguration {
|
||||
}
|
||||
|
||||
// end::httpSecurity[]
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
fun userDetailsService(): UserDetailsService {
|
||||
return InMemoryUserDetailsManager(
|
||||
|
||||
@ -61,17 +61,18 @@ class WithUserDetailsTests {
|
||||
@Configuration
|
||||
open class Config {
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@Bean
|
||||
open fun userDetailsService(): UserDetailsService {
|
||||
val user1 = User.withDefaultPasswordEncoder()
|
||||
.username("user")
|
||||
.password("password")
|
||||
.build();
|
||||
.build()
|
||||
val customUser = User.withDefaultPasswordEncoder()
|
||||
.username("customUsername")
|
||||
.password("password")
|
||||
.build();
|
||||
return InMemoryUserDetailsManager(user1, customUser);
|
||||
.build()
|
||||
return InMemoryUserDetailsManager(user1, customUser)
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user