Spring MVC:保护处理程序方法

时间:2011-04-12 13:29:58

标签: security spring-mvc controller spring-security

我想知道什么是在Spring MVC控制器中保护handler method的好方法。现在我使用@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 :(得分:0)

查看Spring Security ACL(访问控制列表),您可以创建用户对此对象的权限列表。权限包括读,写,删除...

答案 1 :(得分:0)

也许您可以查看@Preauthorize注释。你可以做点什么

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

您需要适当地重写当前代码。

答案 2 :(得分:0)

您需要实现角色基础系统,基于权限用户可以执行删除操作。

如果特定用户具有删除访问权限,则他/她执行删除存根。