0
내 REST API 엔드 포인트에 대한 권한 부여를 처리하기 위해 스프링 보안과 함께 JWT를 사용하고 있습니다. 다음 예에서 엔드 포인트는 사용자에 대한 정보를 제공합니다. ADMIN
사용자 만 모든 사용자의 세부 정보를 가져오고 다른 모든 사용자는 자신의 계정 세부 정보 만 받아야한다고 가정 해 보겠습니다. 누구나 주석 또는 어쩌면 AOP를 사용하여 다음 코드와 동등한 것을 구현하는 선언적 방법을 생각해 낼 수 있습니까?JWT 요청 인수로부터 봄 보안 사용자 권한 부여
@RequestMapping(value = "user/{userId}", method = RequestMethod.GET)
@PreAuthorize("hasAnyRole('USER', 'ADMIN')")
public UserDetailsDto getUserDetails(
@AuthenticationPrincipal JwtUser user,
@PathVariable String userId) {
if (!user.getId().equals(userId) && user.getRole != Role.ADMIN)
throw new BadCredentialsException("Jwt token id and requested ids do not match");
//handle the request
}
나는 스프링 사용자가 아니며 단지 'spring-aop' 태그 때문에이 질문을 발견했다. 어쩌면 어리석은 질문에 대해 용서해주십시오.하지만 관리자 만이 방법으로 허용하고 싶다면 사전 인증 매핑을 @PreAuthorize ("hasAnyRole ('ADMIN')")'로 변경하면 어떨까요? 내가 올바르게 이해했다면, 현재 모든 사용자를 허용 한 다음 코드에서 비 관리자를 수동으로 제외합니다. 내가 오해 한 경우에도 AOP 솔루션 (내 전문 지식)을 제안 할 수는 있지만 우선 이것을 분명히하고 싶습니다. – kriegaex
사용자이지만 사용자 계정에 매핑되지 않은 ID를 요청하는 사용자는 제외하므로 다른 사용자는 다른 모든 사용자의 데이터를 가져올 수 있으며 일반 사용자는 자신의 데이터 만 가져올 수 있습니다. 난 그냥 같은 방법을 재사용하고, 그것을 외부 구성 싶어요. –
이제 귀하의 의도를 잘 이해합니다. 감사합니다. AOP 답변을 제시하기 전에 한 가지 더 : 사용자 ID를 제공하는 모든 방법을 보여주는 [MCVE] (http://stackoverflow.com/help/mcve)를 제공해 주시겠습니까? 스 니펫에서 현재 사용자 메소드 매개 변수 # 1, 세부 정보를 가져 오는 ID는 # 2입니다. '@ RequestBody' 주석을 언급하고 있었지만 어떻게 수행되는지 보여주지 않았습니다. (나는 Spring 사용자가 아니기 때문에 그것을 이해하기 위해 그것을 볼 필요가있다.) 그 동안 나는이 구체적인 예에 대한 해결책을 제시 할 수있다. – kriegaex