【问题标题】:Spring MVC: Securing handler methodSpring MVC:保护处理程序方法
【发布时间】:2011-08-03 21:45:21
【问题描述】:

我想知道在 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";
}

【问题讨论】:

    标签: security spring-mvc controller spring-security


    【解决方案1】:

    或许你可以看看@Preauthorize注解。你可以做类似的事情

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不想将某些操作限制为特定用户。
      【解决方案3】:

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

      如果特定用户具有删除权限,那么他/她会执行删除存根。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-22
        • 2019-03-28
        • 1970-01-01
        • 2018-03-20
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 2012-08-16
        相关资源
        最近更新 更多