diff --git a/Spring BFF/bff/auth/templates/RedisTemplateConfig.kt b/Spring BFF/bff/auth/templates/RedisTemplateConfig.kt index 06251d4..85bf5e6 100644 --- a/Spring BFF/bff/auth/templates/RedisTemplateConfig.kt +++ b/Spring BFF/bff/auth/templates/RedisTemplateConfig.kt @@ -1,126 +1,125 @@ -//package com.example.bff.auth.redis -// -//import com.fasterxml.jackson.databind.ObjectMapper -//import com.fasterxml.jackson.databind.SerializationFeature -//import org.springframework.context.annotation.Bean -//import org.springframework.context.annotation.Configuration -//import org.springframework.context.annotation.Primary -//import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory -//import org.springframework.data.redis.core.ReactiveRedisOperations -//import org.springframework.data.redis.core.ReactiveRedisTemplate -//import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer -//import org.springframework.data.redis.serializer.RedisSerializationContext -//import org.springframework.data.redis.serializer.RedisSerializer -//import org.springframework.data.redis.serializer.StringRedisSerializer -//import org.springframework.lang.Nullable -//import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest -// +package com.example.bff.auth.redis + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SerializationFeature +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.Primary +import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory +import org.springframework.data.redis.core.ReactiveRedisOperations +import org.springframework.data.redis.core.ReactiveRedisTemplate +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer +import org.springframework.data.redis.serializer.RedisSerializationContext +import org.springframework.data.redis.serializer.RedisSerializer +import org.springframework.data.redis.serializer.StringRedisSerializer +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest + /**********************************************************************************************************************/ /***************************************************** TEMPLATES ******************************************************/ /**********************************************************************************************************************/ -// -//@Configuration -//internal class RedisTemplateConfig { -// -// @Bean -// fun objectMapper(): ObjectMapper { -// return ObjectMapper().apply { -// findAndRegisterModules() // automatically register Jackson modules -// configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) // avoid errors on empty beans -// } -// } -// -// @Bean -// // setting a custom session serialiser for Redis -// fun springSessionDefaultRedisSerializer(objectMapper: ObjectMapper): RedisSerializer { -// return object : GenericJackson2JsonRedisSerializer(objectMapper) { -// override fun serialize(value: Any?): ByteArray { -// println("Serializing: $value") -// return super.serialize(value) -// } -// -// override fun deserialize(bytes: ByteArray?): Any { -// val result = super.deserialize(bytes) -// println("Deserialized: $result") -// return result -// } -// } -// } -// -// @Bean -// // setting a custom OAuth2AuthorizationRequest serializer for Redis -// fun oauth2AuthorizationRequestRedisSerializer(objectMapper: ObjectMapper): RedisSerializer { -// return object : RedisSerializer { -// override fun serialize(t: OAuth2AuthorizationRequest?): ByteArray? { -// println("Serializing OAuth2AuthorizationRequest: $t") -// return t?.let { -// val bytes = objectMapper.writeValueAsBytes(it) -// println("Serialized bytes: ${bytes.joinToString(", ") { String.format("%02X", it) }}") -// bytes -// } -// } -// -// override fun deserialize(bytes: ByteArray?): OAuth2AuthorizationRequest? { -// println("Deserializing bytes: ${bytes?.joinToString(", ") { String.format("%02X", it) }}") -// return bytes?.let { -// val result = objectMapper.readValue(it, OAuth2AuthorizationRequest::class.java) -// println("Deserialized OAuth2AuthorizationRequest: $result") -// result -// } -// } -// } -// } -// -// @Bean -// @Primary -// // reactive Redis Template for sessions -// fun reactiveRedisTemplate( -// connectionFactory: ReactiveRedisConnectionFactory, -// springSessionDefaultRedisSerializer: RedisSerializer -// ): ReactiveRedisTemplate { -// val serializationContext = RedisSerializationContext.newSerializationContext() -// .key(StringRedisSerializer()) -// .value(springSessionDefaultRedisSerializer) -// .hashKey(StringRedisSerializer()) -// .hashValue(springSessionDefaultRedisSerializer) -// .build() -// return ReactiveRedisTemplate(connectionFactory, serializationContext) -// } -// -// -// @Bean -// // reactive Redis Operations for sessions -// fun reactiveRedisOperations( -// connectionFactory: ReactiveRedisConnectionFactory, -// springSessionDefaultRedisSerializer: RedisSerializer -// ): ReactiveRedisOperations { -// val serializationContext = RedisSerializationContext.newSerializationContext() -// .key(StringRedisSerializer()) -// .value(springSessionDefaultRedisSerializer) -// .hashKey(StringRedisSerializer()) -// .hashValue(springSessionDefaultRedisSerializer) -// .build() -// -// return ReactiveRedisTemplate(connectionFactory, serializationContext) -// } -// @Bean -// // reactive Redis Template for oauth2AuthorizationRequests -// fun oauth2AuthorizationRequestReactiveRedisTemplate( -// connectionFactory: ReactiveRedisConnectionFactory, -// oauth2AuthorizationRequestRedisSerializer: RedisSerializer -// ): ReactiveRedisTemplate { -// val serializationContext = RedisSerializationContext.newSerializationContext() -// .key(StringRedisSerializer()) -// .value(oauth2AuthorizationRequestRedisSerializer) -// .hashKey(StringRedisSerializer()) -// .hashValue(oauth2AuthorizationRequestRedisSerializer) -// .build() -// -// return ReactiveRedisTemplate(connectionFactory, serializationContext) -// } -// -//} -// -///**********************************************************************************************************************/ -///**************************************************** END OF KOTLIN ***************************************************/ -///**********************************************************************************************************************/ \ No newline at end of file + +@Configuration +internal class RedisTemplateConfig { + + @Bean + fun objectMapper(): ObjectMapper { + return ObjectMapper().apply { + findAndRegisterModules() // automatically register Jackson modules + configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) // avoid errors on empty beans + } + } + + @Bean + // setting a custom session serialiser for Redis + fun springSessionDefaultRedisSerializer(objectMapper: ObjectMapper): RedisSerializer { + return object : GenericJackson2JsonRedisSerializer(objectMapper) { + override fun serialize(value: Any?): ByteArray { + println("Serializing: $value") + return super.serialize(value) + } + + override fun deserialize(bytes: ByteArray?): Any { + val result = super.deserialize(bytes) + println("Deserialized: $result") + return result + } + } + } + + @Bean + // setting a custom OAuth2AuthorizationRequest serializer for Redis + fun oauth2AuthorizationRequestRedisSerializer(objectMapper: ObjectMapper): RedisSerializer { + return object : RedisSerializer { + override fun serialize(t: OAuth2AuthorizationRequest?): ByteArray? { + println("Serializing OAuth2AuthorizationRequest: $t") + return t?.let { + val bytes = objectMapper.writeValueAsBytes(it) + println("Serialized bytes: ${bytes.joinToString(", ") { String.format("%02X", it) }}") + bytes + } + } + + override fun deserialize(bytes: ByteArray?): OAuth2AuthorizationRequest? { + println("Deserializing bytes: ${bytes?.joinToString(", ") { String.format("%02X", it) }}") + return bytes?.let { + val result = objectMapper.readValue(it, OAuth2AuthorizationRequest::class.java) + println("Deserialized OAuth2AuthorizationRequest: $result") + result + } + } + } + } + + @Bean + @Primary + // reactive Redis Template for sessions + fun reactiveRedisTemplate( + connectionFactory: ReactiveRedisConnectionFactory, + springSessionDefaultRedisSerializer: RedisSerializer + ): ReactiveRedisTemplate { + val serializationContext = RedisSerializationContext.newSerializationContext() + .key(StringRedisSerializer()) + .value(springSessionDefaultRedisSerializer) + .hashKey(StringRedisSerializer()) + .hashValue(springSessionDefaultRedisSerializer) + .build() + return ReactiveRedisTemplate(connectionFactory, serializationContext) + } + + + @Bean + // reactive Redis Operations for sessions + fun reactiveRedisOperations( + connectionFactory: ReactiveRedisConnectionFactory, + springSessionDefaultRedisSerializer: RedisSerializer + ): ReactiveRedisOperations { + val serializationContext = RedisSerializationContext.newSerializationContext() + .key(StringRedisSerializer()) + .value(springSessionDefaultRedisSerializer) + .hashKey(StringRedisSerializer()) + .hashValue(springSessionDefaultRedisSerializer) + .build() + + return ReactiveRedisTemplate(connectionFactory, serializationContext) + } + @Bean + // reactive Redis Template for oauth2AuthorizationRequests + fun oauth2AuthorizationRequestReactiveRedisTemplate( + connectionFactory: ReactiveRedisConnectionFactory, + oauth2AuthorizationRequestRedisSerializer: RedisSerializer + ): ReactiveRedisTemplate { + val serializationContext = RedisSerializationContext.newSerializationContext() + .key(StringRedisSerializer()) + .value(oauth2AuthorizationRequestRedisSerializer) + .hashKey(StringRedisSerializer()) + .hashValue(oauth2AuthorizationRequestRedisSerializer) + .build() + + return ReactiveRedisTemplate(connectionFactory, serializationContext) + } + +} + +/**********************************************************************************************************************/ +/**************************************************** END OF KOTLIN ***************************************************/ +/**********************************************************************************************************************/ \ No newline at end of file