응용 프로그램 시나리오
Springsecurityoauth2는 이상한 디자인을 가지고 있습니다. 즉, Access_token과 관련된 모든 소지품을 Oauth2accesstoken에 캡슐화 한 다음 저장되면 객체를 바이트로 직접 직렬화하고 데이터베이스에 작성합니다. 우리는 Resource Server에서 데이터베이스를 직접 읽고 Access_token을 검색하여 토큰의 유효성을 확인하고 싶지만 Springsecurity 관련 종속성 오염 JAR 패키지를 소개하고 싶지 않습니다. 현재 Springsecurity에서 유일한 구현 클래스 DefaultoAuth2AccessToken의 소스 코드를 프로젝트에 복사 한 다음 JDBC를 통해 BYTE []를 읽은 다음 JDK의 자체 사막화 메커니즘을 통해 DefaultoAuth2AccessToken 객체를 복원 할 수 있습니다. 이 시점에서 문제가 발생합니다. 즉, 원래 OAuth2accesstoken 패키지는 org.springframework.security로 시작하고 소스 코드를 복사 한 후 패키지 이름은 패키지 CN.com.xxxx로 시작합니다. 이런 식으로, 사제화 할 때, 두 클래스의 필드가 정확히 동일하더라도, 바이트 스트림에 저장된 클래스 정보의 다른 자격을 갖춘 이름으로 인해 사막화 실패가 발생합니다.
해결책
서브 클래스를 정의 할 수 있습니다.
@Override Protected ObjectStreamClass readClassDescriptor ()는 ioException, classNotFoundException {ObjectStreamClass read = super.ReadClassDescriptor (); if (read.getName (). StartSwith ( "원래 패키지 이름")) {class type = class.forname (읽기. ObjectStreamClass.lookup (type);} retud read;}이런 식으로, 필수화 할 때 오류가 없을 것입니다. 원칙은 복잡하지 않습니다. 실제로, 바이트 스트림을 구문 분석 할 때, org.springframework.security.oauth2.common.defautoauthtoken으로 구문 분석 해야하는 클래스는 cn.com.xxxxx.defaultoauthtoken으로 대체되어 "사망"의 목적을 달성하기 위해 소스 코드를 복사했습니다. 이 시나리오에서는 Springsecurity 프레임 워크를 리소스 제공 업체에 소개하지 않고 Springsecurityoauth2의 권한 부여 서비스 만 사용할 수 있습니다. 리소스 제공 업체는 데이터베이스를 직접 읽어 공인 서비스를 쿼리하는 대신 토큰의 유효성을 확인합니다.
요약
위는 JDK 사막화 동안 수정 된 클래스의 본격화 된 이름 해상도에 대한이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!