diff --git a/fiat-api/fiat-api.gradle b/fiat-api/fiat-api.gradle index 2647e387f..796c17d66 100644 --- a/fiat-api/fiat-api.gradle +++ b/fiat-api/fiat-api.gradle @@ -33,7 +33,7 @@ dependencies { implementation "com.squareup.retrofit2:converter-jackson" implementation "org.apache.commons:commons-lang3" - compileOnly "javax.servlet:javax.servlet-api" + compileOnly "jakarta.servlet:jakarta.servlet-api" implementation "com.github.ben-manes.caffeine:caffeine" diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/AuthenticatedRequestAuthenticationConverter.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/AuthenticatedRequestAuthenticationConverter.java index 56f837705..65f8ca722 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/AuthenticatedRequestAuthenticationConverter.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/AuthenticatedRequestAuthenticationConverter.java @@ -17,8 +17,8 @@ package com.netflix.spinnaker.fiat.shared; import com.netflix.spinnaker.security.AuthenticatedRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.List; -import javax.servlet.http.HttpServletRequest; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.AuthorityUtils; diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandler.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandler.java index 5028c6079..44ff995ad 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandler.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandler.java @@ -18,11 +18,11 @@ import com.netflix.spinnaker.kork.api.exceptions.AccessDeniedDetails; import com.netflix.spinnaker.kork.web.exceptions.ExceptionMessageDecorator; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; import java.util.StringJoiner; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.servlet.error.DefaultErrorAttributes; diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConfig.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConfig.java index b0a9aaf0e..35dbab14a 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConfig.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConfig.java @@ -36,7 +36,7 @@ import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 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.WebSecurityConfigurerAdapter; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.AnonymousAuthenticationFilter; import org.springframework.security.web.authentication.AuthenticationConverter; import retrofit2.Retrofit; @@ -93,9 +93,19 @@ AuthenticationConverter defaultAuthenticationConverter() { } @Bean - FiatWebSecurityConfigurerAdapter fiatSecurityConfig( - FiatStatus fiatStatus, AuthenticationConverter authenticationConverter) { - return new FiatWebSecurityConfigurerAdapter(fiatStatus, authenticationConverter); + public SecurityFilterChain securityFilterChain( + HttpSecurity http, FiatStatus fiatStatus, AuthenticationConverter authenticationConverter) + throws Exception { + return http.servletApi() + .and() + .exceptionHandling() + .and() + .anonymous() + .and() + .addFilterBefore( + new FiatAuthenticationFilter(fiatStatus, authenticationConverter), + AnonymousAuthenticationFilter.class) + .build(); } @Bean @@ -104,29 +114,4 @@ FiatAccessDeniedExceptionHandler fiatAccessDeniedExceptionHandler( ExceptionMessageDecorator exceptionMessageDecorator) { return new FiatAccessDeniedExceptionHandler(exceptionMessageDecorator); } - - private static class FiatWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { - private final FiatStatus fiatStatus; - private final AuthenticationConverter authenticationConverter; - - private FiatWebSecurityConfigurerAdapter( - FiatStatus fiatStatus, AuthenticationConverter authenticationConverter) { - super(true); - this.fiatStatus = fiatStatus; - this.authenticationConverter = authenticationConverter; - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.servletApi() - .and() - .exceptionHandling() - .and() - .anonymous() - .and() - .addFilterBefore( - new FiatAuthenticationFilter(fiatStatus, authenticationConverter), - AnonymousAuthenticationFilter.class); - } - } } diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConverter.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConverter.java index 92d30494e..5de7d860a 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConverter.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationConverter.java @@ -19,8 +19,8 @@ import com.netflix.spinnaker.fiat.model.SpinnakerAuthorities; import com.netflix.spinnaker.fiat.model.UserPermission; import com.netflix.spinnaker.kork.common.Header; +import jakarta.servlet.http.HttpServletRequest; import java.util.List; -import javax.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationFilter.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationFilter.java index 895214ba5..767d6d204 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationFilter.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/FiatAuthenticationFilter.java @@ -16,12 +16,12 @@ package com.netflix.spinnaker.fiat.shared; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpFilter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; diff --git a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/HeadersRedactor.java b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/HeadersRedactor.java index 550838946..9b714c5a1 100644 --- a/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/HeadersRedactor.java +++ b/fiat-api/src/main/java/com/netflix/spinnaker/fiat/shared/HeadersRedactor.java @@ -16,10 +16,10 @@ package com.netflix.spinnaker.fiat.shared; +import jakarta.servlet.http.HttpServletRequest; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; class HeadersRedactor { diff --git a/fiat-api/src/test/groovy/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandlerSpec.groovy b/fiat-api/src/test/groovy/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandlerSpec.groovy index 7c164588c..6643c68b8 100644 --- a/fiat-api/src/test/groovy/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandlerSpec.groovy +++ b/fiat-api/src/test/groovy/com/netflix/spinnaker/fiat/shared/FiatAccessDeniedExceptionHandlerSpec.groovy @@ -32,8 +32,8 @@ import spock.lang.Subject import org.springframework.security.access.AccessDeniedException import spock.lang.Unroll -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse class FiatAccessDeniedExceptionHandlerSpec extends FiatSharedSpecification { diff --git a/fiat-github/fiat-github.gradle b/fiat-github/fiat-github.gradle index bfd3f5bc7..1a0260f8f 100644 --- a/fiat-github/fiat-github.gradle +++ b/fiat-github/fiat-github.gradle @@ -8,5 +8,5 @@ dependencies { implementation "com.squareup.retrofit2:converter-jackson" implementation "io.spinnaker.kork:kork-web" implementation "io.spinnaker.kork:kork-retrofit" - implementation "javax.validation:validation-api" + implementation "jakarta.validation:jakarta.validation-api" } diff --git a/fiat-github/src/main/java/com/netflix/spinnaker/fiat/roles/github/GitHubProperties.java b/fiat-github/src/main/java/com/netflix/spinnaker/fiat/roles/github/GitHubProperties.java index 542893bd4..4eef29cd0 100644 --- a/fiat-github/src/main/java/com/netflix/spinnaker/fiat/roles/github/GitHubProperties.java +++ b/fiat-github/src/main/java/com/netflix/spinnaker/fiat/roles/github/GitHubProperties.java @@ -1,9 +1,9 @@ package com.netflix.spinnaker.fiat.roles.github; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/permissions/RedisPermissionsRepository.java b/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/permissions/RedisPermissionsRepository.java index 20a8e7501..9487b83a2 100644 --- a/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/permissions/RedisPermissionsRepository.java +++ b/fiat-roles/src/main/java/com/netflix/spinnaker/fiat/permissions/RedisPermissionsRepository.java @@ -43,7 +43,7 @@ import lombok.extern.slf4j.Slf4j; import net.jpountz.lz4.*; import redis.clients.jedis.*; -import redis.clients.jedis.commands.BinaryJedisCommands; +import redis.clients.jedis.commands.JedisBinaryCommands; import redis.clients.jedis.util.SafeEncoder; /** @@ -324,7 +324,7 @@ private byte[] getUserResourceBytesFromRedis(String id, ResourceType resourceTyp byte[] key = userKey(id, resourceType); byte[] compressedData = - redisRead(timeoutContext, (ThrowingFunction) c -> c.get(key)); + redisRead(timeoutContext, (ThrowingFunction) c -> c.get(key)); if (compressedData == null || compressedData.length == 0) { return null; @@ -577,7 +577,7 @@ Duration getTimeout() { } } - private T redisRead(TimeoutContext timeoutContext, Function fn) { + private T redisRead(TimeoutContext timeoutContext, Function fn) { return retryRegistry .retry(REDIS_READ_RETRY) .executeSupplier( diff --git a/fiat-sql/fiat-sql.gradle b/fiat-sql/fiat-sql.gradle index 5e7fe80d1..eec76bfd1 100644 --- a/fiat-sql/fiat-sql.gradle +++ b/fiat-sql/fiat-sql.gradle @@ -32,6 +32,7 @@ dependencies { implementation "io.strikt:strikt-core" implementation "io.github.resilience4j:resilience4j-retry" + implementation "io.github.resilience4j:resilience4j-vavr" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j" diff --git a/fiat-sql/src/main/kotlin/com/netflix/spinnaker/fiat/permissions/SqlPermissionsRepository.kt b/fiat-sql/src/main/kotlin/com/netflix/spinnaker/fiat/permissions/SqlPermissionsRepository.kt index 8946792f3..0f80e32fe 100644 --- a/fiat-sql/src/main/kotlin/com/netflix/spinnaker/fiat/permissions/SqlPermissionsRepository.kt +++ b/fiat-sql/src/main/kotlin/com/netflix/spinnaker/fiat/permissions/SqlPermissionsRepository.kt @@ -46,7 +46,7 @@ import java.time.Clock import java.time.Duration import java.util.* import java.util.concurrent.atomic.AtomicReference -import javax.annotation.PreDestroy +import jakarta.annotation.PreDestroy import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract import kotlin.coroutines.CoroutineContext diff --git a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/config/FiatConfig.java b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/config/FiatConfig.java index 9b74d0b74..49ec360ca 100644 --- a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/config/FiatConfig.java +++ b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/config/FiatConfig.java @@ -40,12 +40,12 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @Import({RetrofitConfig.class, PluginsAutoConfiguration.class}) @EnableConfigurationProperties(FiatServerConfigurationProperties.class) -public class FiatConfig extends WebMvcConfigurerAdapter { +public class FiatConfig implements WebMvcConfigurer { @Autowired private Registry registry; @@ -60,7 +60,6 @@ public void addInterceptors(InterceptorRegistry registry) { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { - super.configureContentNegotiation(configurer); configurer.favorPathExtension(false).defaultContentType(MediaType.APPLICATION_JSON); } diff --git a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/AuthorizeController.java b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/AuthorizeController.java index aac2f801f..4c0804103 100644 --- a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/AuthorizeController.java +++ b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/AuthorizeController.java @@ -31,12 +31,12 @@ import com.netflix.spinnaker.kork.web.exceptions.NotFoundException; import com.netflix.spinnaker.security.AuthenticatedRequest; import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.function.Supplier; import java.util.stream.Collectors; import javax.annotation.Nonnull; -import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import lombok.val; import org.springframework.beans.factory.annotation.Autowired; diff --git a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/RolesController.java b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/RolesController.java index 7a1e78d56..d8479b48b 100644 --- a/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/RolesController.java +++ b/fiat-web/src/main/java/com/netflix/spinnaker/fiat/controllers/RolesController.java @@ -23,10 +23,10 @@ import com.netflix.spinnaker.fiat.permissions.PermissionsRepository; import com.netflix.spinnaker.fiat.permissions.PermissionsResolver; import com.netflix.spinnaker.fiat.roles.UserRolesSyncer; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletResponse; import lombok.NonNull; import lombok.Setter; import lombok.extern.slf4j.Slf4j; diff --git a/fiat-web/src/test/groovy/com/netflix/spinnaker/fiat/controllers/AuthorizeControllerSpec.groovy b/fiat-web/src/test/groovy/com/netflix/spinnaker/fiat/controllers/AuthorizeControllerSpec.groovy index c0d604ebd..0ff40e636 100644 --- a/fiat-web/src/test/groovy/com/netflix/spinnaker/fiat/controllers/AuthorizeControllerSpec.groovy +++ b/fiat-web/src/test/groovy/com/netflix/spinnaker/fiat/controllers/AuthorizeControllerSpec.groovy @@ -49,7 +49,7 @@ import spock.lang.Shared import spock.lang.Specification import spock.lang.Unroll -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpServletResponse import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content @@ -164,7 +164,7 @@ class AuthorizeControllerSpec extends Specification { then: - mockMvc.perform(get("/authorize/")).andExpect(status().is4xxClientError()) + mockMvc.perform(get("/authorize")).andExpect(status().is4xxClientError()) when: fiatServerConfigurationProperties.setGetAllEnabled(true) @@ -176,7 +176,7 @@ class AuthorizeControllerSpec extends Specification { roleAroleBUser.view]) then: - mockMvc.perform(get("/authorize/")) + mockMvc.perform(get("/authorize")) .andExpect(status().isOk()) .andExpect(content().json(expected)) }