홈>
내 구성에 인터셉터가 있으며 다른 사용자의 리소스에 대한 액세스를 금지하고 싶습니다. WebMvcConfig (WebMvcConfigurer 구현) 내부에는 다음이 있습니다.
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new FolderInterceptor(userService, folderService))
.addPathPatterns(Mapping.FOLDER_MAPPING + "/{id}",
Mapping.UPDATE_FOLDER_MAPPING + "/{id}",
Mapping.DELETE_FOLDER_MAPPING + "/{id}",
Mapping.DOWNLOAD_FOLDER_MAPPING + "/{id}");
}
FolderInterceptor에는 액세스 폴더를 가져 와서 소유자를 확인하는 preHandle 메소드가 있습니다 :
Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
Long id = Long.valueOf((String) pathVariables.get("id"));
User user = userService.getLoggedAccount();
if (folderService.existsById(id)) {
Folder folder = folderService.findById(id);
if (folder.getOwner().getId().equals(user.getId())) {
return true;
}
else {
response.sendError(403, "Unauthorized");
return false;
}
}
else {
response.sendError(404, "Folder does not exist");
return false;
}
폴더 개체를 인쇄하면 해당 줄에 동일한 오류가 발생합니다.
org.hibernate.LazyInitializationException: could not initialize proxy.
도움을 주셔서 감사합니다.
-
답변 # 1
-
답변 # 2
getOne 메소드를 사용하여 서비스에서 ID별로 폴더를 검색했습니다. 이제 folderRepository.findById (id)를 사용하면 다음과 같이 작동합니다.
public Folder findById(Long id) { Optional<Folder> folder = folderRepository.findById(id); if (!folder.isPresent()) return null; return folder.get(); }
관련 자료
- javascript - React Hook`useWindowSize`를 사용하여 MobX Store 내에서 창 크기를 초기화하는 방법은 무엇입니까?
- android - 세션 'app' - 설치에 실패했습니다 애플리케이션을 설치할 수 없습니다 : install_failed_invalid_apk
- android - react-native - orgcodehausgroovyreflectionreflectioncache 클래스를 초기화 할 수 없습니다
- javascript - 행 셀 내부의 PHP 변수를 $_SESSION 변수에 전달하는 방법
- asp.net mvc - mvc 레이아웃 페이지 내에서 모델의 데이터를 초기화하고 드롭 다운 목록에 바인딩하는 올바른 방법은 무엇입니까?
- junit - Java 스트림 내에서 when ()을 사용하여 모의를 초기화 할 수 있습니까?
- hibernate - javalangnoclassdeffounderror - 클래스 orgslf4jloggerfactory를 초기화 할 수 없습니다
- typescript - NestJS의 GraphQL 리졸버 내부에서 세션 키를 어떻게 설정합니까?
- javalangnoclassdeffounderror - 클래스 suntextnormalizernormalizerimpl을 초기화 할 수 없습니다
관련 질문
- java - 웹 서버가 봄 부팅에서 HTTP를 노출하기 전에 코드가 실행되는지 확인하십시오
- java - 봄 부팅 - 모든 자동 연결 구성 변수를 하나의 클래스에 포함
- java - ControllerAdvice, ExceptionHandler 및 RestController에서 catch 블록 시도
- java/spring boot를 사용하는 클라우드 네이티브 빌드 팩/paketo - 다른 jdk 다운로드 uri를 구성하는 방법 (예 : githubcom에 대한 액세스 권한 없음)
- java - SpringBoot 리소스를 UTF-8 파일로 엽니 다
- java - Spring RESTful 웹 서비스 문제
- java - JUnit 테스트는 하나씩 실행할 때만 통과합니다 아마도 잘못된 스레딩
- spring - Java에서 주석 번들을 생성 할 수 있습니까 (즉, 다른 주석을 적용하는 주석)?
- java - Spring에서 Keycloak 토큰을 얻는 방법
- java - 마지막 반복에서 문자열 분할
Folder
를 검색 중입니다 하나의 트랜잭션에서 종속성을 가져 오지 않는 엔티티는 다음과 같습니다.그런 다음
folder.getOwner()
에 액세스하려고 할 때 소유자 종속성을 가져 오지 않고 지속성 제공자가 데이터베이스에서 지연로드를 시도합니다.문제는 그
folder
입니다 거래 범위를 벗어 났으며 분리 된 엔티티입니다.Owner
를 가져 오는 것이 좋습니다folderService.findById(id)
내부 메소드를 사용하거나 쿼리와 조건부를 동일한 트랜잭션 방식으로 설정하십시오.