簡體   English   中英

spring-security-oauth2 中的 Insteate 自定義 OAuth2User 導致反序列化錯誤

[英]Insteate custom OAuth2User in spring-security-oauth2 causes deserialize error

我在我的 web 應用程序中使用 spring-security-oauth2-client。 我想使用自定義用戶類型。 但是當 Insteate OAuthUser 使用身份驗證服務器發送的請求正文時出錯。

我使用自定義用戶類型的原因是因為我想使用 hashmap 內部的字符串值作為 nameAttributeKey 而不是字符串值。

安全配置

    http.oauth2Login()
      .userInfoEndpoint()
        .customUserType(NaverOAuth2User.class, "naver");

NaverOAuth2用戶

public class NaverOAuth2User implements OAuth2User {

   public NaverOAuth2User(Collection<? extends GrantedAuthority> authorities, Map<String, Object> attributes, String nameAttributeKey) {
           ...
   }

   ...

}

我希望調用 NaverOAuth2User 的構造函數,但在序列化之前導致錯誤。

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.rw.springsecurity.vo.NaverOAuth2User` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (PushbackInputStream); line: 1, column: 2]
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3085) ~[jackson-databind-2.9.9.3.jar:2.9.9.3]
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:239) ~[spring-web-5.1.10.RELEASE.jar:5.1.10.RELEASE]

我假設構造函數參數是錯誤的。

在幕后 Spring Security 使用RestTemplate將來自 userInfo 端點的數據反序列化為我們指定的需要默認構造函數的自定義類型。

您可以在org.springframework.security.oauth2.client.userinfo.CustomUserTypesOAuth2UserService中檢查此邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM