没有PathVariable的控制器方法会删除所有权限

时间:2017-02-05 23:53:28

标签: java spring model-view-controller

我想要那个方法:

@DeleteMapping("/todos/{id}")
public ResponseEntity deleteToDo(
        @PathVariable("id") Long itemId,
        Principal principal
) {
    ObjectNode jsonObject = mapper.createObjectNode();
    User currentUser = userService.findLoggedInUser(principal);
    if (toDoItemService.toDoExists(itemId)) {
        ToDoItem toDoFromDb = toDoItemService.getToDoItemById(itemId);
        if (toDoItemService.canUserAccessToDo(toDoFromDb, currentUser)) {
                toDoItemService.deleteToDo(itemId);
            return new ResponseEntity(HttpStatus.NO_CONTENT);
        } else {
            jsonObject.put("status", "You can only delete your ToDos");
            return new ResponseEntity<>(jsonObject, HttpStatus.FORBIDDEN);
        }
    } else {
        jsonObject.put("status", "ToDo with that ID doesn't exist.");
        return new ResponseEntity<>(jsonObject, HttpStatus.NOT_FOUND);
    }
}

仅在网址中有{id}时才有效。现在,当我执行DELETE @ / todos /它从数据库中删除所有ToDos时 - 我不知道为什么,因为在此行if (toDoItemService.toDoExists(itemId))返回false之后它应该返回&#34;带有该ID的ToDo没有& #39; t存在&#34;但它会删除所有ToDos。

以下是 toDoExists 方法:

 public boolean toDoExists(Long id) {
    if (toDoItemRepository.findOne(id) != null) {
        return true;
    }
    return false;
}

我该如何解决?我希望用户只能访问DELETE @ / todos / {id},如果他去/ todos /那么他就不会使用&#39;方法&#39;或类似的东西。

1 个答案:

答案 0 :(得分:0)

我宁愿把它放在评论中,但我没有足够的代表发表评论:(

你不会碰巧有另一个删除方法(没有路径变量)删除所有待办事项? 因此,当你没有通过路径变量时,它会触及该方法吗? 例如

@DeleteMapping("/todos")
public ResponseEntity deleteTodos(){ service.deleteAll(); return... }