Spring Session Redis Graalvm Ошибка сериализацииJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Session Redis Graalvm Ошибка сериализации

Сообщение Anonymous »

У меня есть простое приложение Spring Boot, которое использует клиент OAuth2 и Spring Session Redis. Он имеет настройку по умолчанию в Application.yml: < /p>
spring:
session:
store-type: redis
redis:
namespace: my:namespace
timeout: 1h
data:
redis:
host: localhost
port: 6379
password: redispassword
security:
oauth2:
client:
provider:
azure:
issuer-uri: https://login.microsoftonline.com}/some-tenant-id/v2.0
registration:
caiman:
provider: azure
client-id: some-client-id
client-secret: some-client-secret
scope:
- openid
- email
- profile
< /code>
Я пытаюсь перенести свое приложение на нативное изображение Graalvm. Я добавил отсутствующие данные сериализации в сериализацию config.json: < /p>
[
{
"name": "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest"
},
{
"name": "java.util.Collections$UnmodifiableMap"
},
{
"name": "java.util.HashMap"
},
{
"name": "java.util.LinkedHashMap"
},
{
"name": "java.util.LinkedHashSet"
},
{
"name": "org.springframework.security.oauth2.core.user.OAuth2UserAuthority"
},
{
"name": "java.net.URL"
},
{
"name": "org.springframework.security.oauth2.core.AuthorizationGrantType",
"customTargetConstructorClass": "java.lang.Object"
},
{
"name": "java.util.HashSet",
"customTargetConstructorClass": "java.util.AbstractSet"
},
{
"name": "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse"
},
{
"name": "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType"
},
{
"name": "org.springframework.security.oauth2.core.oidc.user.OidcUserAuthority"
},
{
"name": "java.util.Date",
"customTargetConstructorClass": "java.lang.Object"
},
{
"name": "java.time.Instant",
"customConstructorClass": "java.lang.Object"
},
{
"name": "org.springframework.security.oauth2.core.AbstractOAuth2Token",
"customConstructorClass": "java.lang.Object"
},
{
"name": "org.springframework.security.oauth2.core.oidc.OidcIdToken",
"customTargetConstructorClass": "java.lang.Object"
},
{
"name": "org.springframework.security.oauth2.core.user.DefaultOAuth2User",
"customTargetConstructorClass": "java.lang.Object"
},
{
"name": "org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser",
"customTargetConstructorClass": "java.lang.Object"
},
{
"name": "jakarta.servlet.http.Cookie"
}
]
< /code>
, а также я написал такой Revert-config.json: < /p>
[
{
"name": "jakarta.servlet.http.Cookie",
"allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.springframework.security.web.savedrequest.DefaultSavedRequest",
"allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest",
"allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.springframework.security.core.context.SecurityContextImpl",
"allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
},
{
"name": "org.springframework.security.oauth2.common.OAuth2AccessToken",
"allDeclaredFields": true,
"allDeclaredMethods": true,
"allDeclaredConstructors": true
}
]
< /code>
Но тогда я получил следующую ошибку: < /p>
Cannot serialize at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:98)
< /code>
Я читал, что предлагается не использовать jdkserializator с graalvm и вместо этого использовать Genericjackson2jsonredisserializer. Я переопределяю сериализатор Redis Default Serializer, как это: < /p>
@Configuration
public class SessionConfiguration implements BeanClassLoaderAware {

private ClassLoader loader;

@Bean
public RedisSerializer springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer(objectMapper());
}

private ObjectMapper objectMapper() {
var mapper = new ObjectMapper();
mapper.registerModules(SecurityJackson2Modules.getModules(this.loader));
return mapper;
}

@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.loader = classLoader;
}
}
< /code>
После этого, когда я пытаюсь разрешить, я получаю эту ошибку: < /p>
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest
< /code>
Кто -нибудь знает, как это исправить? Или кто -то также пытался использовать Spring Session Redis с Graalvm?

Подробнее здесь: https://stackoverflow.com/questions/796 ... tion-error

Вернуться в «JAVA»