2011-04-12 3 views
0

스프링 MVC 컨트롤러에서 handler method을 보호하기위한 좋은 접근 방법이 궁금합니다. 이제 나는 @Secured 어노테이션을 사용하는데, 이는 어떤 메소드가 로그 인한 사용자 만 액세스 할 수 있음을 보장합니다. 그러나 한 사용자가 다른 사용자에게 나쁜 영향을 미치지 않도록하는 방법은 무엇입니까? 예를 들어 주어진 항목 id과 함께 삭제하는 메소드가 있습니다. 다른 사람이 자신의 물건 이외의 물품을 지울 수 없도록하려면 물품 소유자를 확인하십시오. 그런 식으로하는 것이 더 좋은 방법인가요?스프링 MVC : 보안 처리 메소드

@Secured("ROLE_USER") 
@RequestMapping("/deleteitem.html") 
public String delete(@RequestParam(value="id") Long id) { 
    Item b = itemDAO.get(id); 
    if(b.getOwner().getId().equals(((UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUser().getId())) { 
     itemDAO.delete(id); 
    } 
    return "redirect:/user/items.html"; 
} 

답변

0

아마도 @Preauthorize 주석을 볼 수 있습니다. 다음과 같이 할 수 있습니다

@PreAuthorize("#item.id == authentication.id") 
    public void doSomething(Item item); 

현재 코드를 적절하게 다시 작성해야합니다.

0

봄 보안 ACL (액세스 제어 목록)을 보면 사용자가이 개체에 대해 가지는 권한 목록을 만들 수 있습니다. 권한에는 읽기, 쓰기, 삭제가 포함됩니다 ...

+0

일부 사용자는 특정 동작을 제한하고 싶지 않습니다. – marioosh

0

사용자가 권한 삭제 작업을 수행 할 수있는 권한 기반 시스템을 구현해야합니다.

삭제 권한이있는 특정 사용자는 삭제 스텁을 수행합니다.