Spring MVC: метод обеспечения безопасности - PullRequest
0 голосов
/ 12 апреля 2011

Мне интересно, какой хороший подход к обеспечению безопасности handler method в контроллере Spring MVC.Теперь я использую аннотацию @Secured, которая обеспечивает доступ к какому-либо методу только зарегистрированному пользователю.Но как сделать так, чтобы один зарегистрированный пользователь не делал ничего плохого для других пользователей?Например, у меня есть метод, который удаляет элемент с данным id.Чтобы убедиться, что кто-то не может удалить, кроме своих предметов, я проверяю владельца предмета.Есть ли лучший способ сделать что-то подобное?

@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";
}

Ответы [ 3 ]

0 голосов
/ 14 апреля 2011

Возможно, вы можете посмотреть аннотацию @ Preauthorize .Вы можете сделать что-то вроде

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

Вам нужно будет соответствующим образом переписать текущий код.

0 голосов
/ 14 апреля 2011

Вам необходимо внедрить систему ролевой базы, основанную на привилегиях, пользователь может выполнить операцию удаления.

Если конкретный пользователь имеет доступ к удалению, он / она выполняет удаление заглушки.

0 голосов
/ 12 апреля 2011

Посмотрите в Spring Security ACL (список контроля доступа) вы можете создать список разрешений, которые пользователи имеют для этого объекта.Разрешения включают чтение, запись, удаление ...

...