2010-07-25 2 views
1

내가 ID로 즉 사용자 (안 역할) 수준 만 소유자에스프링 보안 및 멀티 테넌시/중지 -> 어떻게? 모범 사례? 참조 앱?

@RequestMapping("/owners/{ownerId}/pets/new") 

같은 URL을 확보 할 수있는 방법을 찾고있다 {ownerId은} 액세스 할 수 있습니다. 또한 RESTful 디자인을 포함하여 보안을 유지하려고합니다. 소유자 레벨 의 JSON 서비스에 비동기로 액세스.

내 질문 :

  1. 방법이 가장 봄 보안이 이루어집니다?
  2. /소유자/{ownerId}/pets/new가 비동기 요청을 통해 에 액세스하면 어떻게 이루어 집니까?
  3. 타사 앱에서 위에서 언급 한 URI 에 어떻게 액세스합니까? iPhone 앱?
  4. 모든 샘플/참조 응용 프로그램/기사?

감사 어

답변

2

@PreAuthorize을 사용하십시오.

@RequestMapping("/owners/{ownerId}/pets/new") 
@PreAuthorize("#ownerId == principal.id)") 
public void doSomething(@RequestParam Number ownerId); 

위의 코드는 대표적인 것입니다. 일부 세부 사항은 구현에 따라 다릅니다.

자세히 알아보기 here.

1

질문 1, 나는입니다 생각할 수있는 가장 간단한 방법에 대해서 - 먼저 ID를 기반으로 사용자 권한 부여를 확인할 수 있습니다 컨트롤러 방법 내에서합니다. UserDetails는 SpringSecurityContext에서 접근 가능하며, 현재 로그인 한 사용자의 ID를 검색 할 수 있습니다. 요청 URL에서 얻은 ID는 경로 변수로 액세스 할 수도 있습니다. 이 두 가지가 일치하지 않으면 AccessDeniedException과 같은 예외를 던질 수 있습니다. 이 논리를 모든 컨트롤러의 수퍼 클래스 역할을하는 BaseController의 메서드로 옮길 수 있으며 비슷한 방법으로 모든 컨트롤러 메서드에서 동일한 메서드를 사용할 수 있습니다.