Add compile-warnings-error

Closes gh-18424

Signed-off-by: Tran Ngoc Nhan <ngocnhan.tran1996@gmail.com>
This commit is contained in:
Tran Ngoc Nhan 2026-01-27 20:10:24 +07:00 committed by Rob Winch
parent d244bcf76e
commit 8bafd94b1f
17 changed files with 34 additions and 34 deletions

View File

@ -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'

View File

@ -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 {

View File

@ -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()

View File

@ -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[]

View File

@ -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
}

View File

@ -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(

View File

@ -44,6 +44,7 @@ internal class EnableMultiFactorAuthenticationConfiguration {
}
// end::httpSecurity[]
@Suppress("DEPRECATION")
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(

View File

@ -38,6 +38,7 @@ internal class ListAuthoritiesConfiguration {
}
// end::httpSecurity[]
@Suppress("DEPRECATION")
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(

View File

@ -45,6 +45,7 @@ internal class MultipleAuthorizationRulesConfiguration {
}
// end::httpSecurity[]
@Suppress("DEPRECATION")
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -34,6 +34,7 @@ class RequireOttConfiguration {
}
// end::httpSecurity[]
@Suppress("DEPRECATION")
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(

View File

@ -31,6 +31,7 @@ class SimpleConfiguration {
}
// end::httpSecurity[]
@Suppress("DEPRECATION")
@Bean
fun userDetailsService(): UserDetailsService {
return InMemoryUserDetailsManager(

View File

@ -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(

View File

@ -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(

View File

@ -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