2013-05-29 3 views
2

@PreAuthorize 및 @Secured와 같은 스프링 보안 주석을 사용하려고하지만 Im은 역할이 아닌 사용자를 평가하려고하지만이 경우 특정 엔터티에 대한 사용 권한이 있는지 여부를 확인하려고합니다. . 내 컨트롤러에서 매개 변수로 firmId가 포함 된 http 요청을 수신하고이 사용자가이 회사에 허가되었는지 확인하려고합니다. 현재 스프링 보안 주석을 사용하여 가능합니까? 안녕하세요, 우아한 솔루션을 찾고, jsr303 사양의 일부로 사용자 지정 제약 조건 검사기를 살펴 보았습니다. 아래 메소드 헤더.사용자 지정 봄 보안 주석 사용

public ModelAndView getSessionsJson(HttpServletRequest request, 
    HttpServletResponse response) throws ServletRequestBindingException {} 

답변

2

난 당신이 이런 식으로 뭔가를 할 수 있다고 생각 :

public ModelAndView getSessionsJson(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException { 
    Integer firmId = getFirmId(request); 
    Firm firm = getFirmById(firmId); 
    doSomeBusinessLogic(firm); 
    ..... 
} 

@PreAuthorize("hasPermission(#firm, 'admin')") 
public void doSomeBusinessLogic(Firm firm) { 
    .... 
} 

.... 

ACL module와 연동 해에 pre and post annotations를 사용하여. 물론 ACL DB schema을 설정하고 각 회사 객체에 대한 ACL 권한을 준비해야합니다.

+0

나는 액세스 제어 목록을 사용하는 아이디어가 마음에 든다. 궁금한 점이 있다면 어떤 성능 향상이 있을까요? 왜냐하면 id는 매우 많은 사용자들로 엔트리 테이블이 매우 커질 수 있다고 생각하기 때문입니다. – john

+0

공식 문서 : "Spring Security ACL 모듈의 주요 기능 중 하나는 고성능 ACL 검색 방법을 제공하는 것"입니다. ACL이 충분히 빠르다는 유일한 방법은 데이터를 채우고 응답 시간을 확인하는 것입니다. –