![](/img/trans.png)
[英]EnableWebSecurity annotation gives error at spring-security-oauth2
[英]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.