【发布时间】:2017-04-12 11:55:48
【问题描述】:
假设我有两个实体如下:
@Entity
public class ClassA {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToMany
private Set<ClassB> classBs = new HashSet<>();
}
@Entity
public class ClassB {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
也就是说,ClassA 包含一组 ClassB。还有一个更新 ClassA 的资源:
@RequestMapping(method = RequestMethod.PUT)
public ClassA update(@RequestBody ClassA a){
// Update code here
}
然后在 DAO(使用休眠)中调用以下代码来更新数据库中的 ClassA:
@Override
public ClassA save(ClassA classA) {
sessionFactory.getCurrentSession().saveOrUpdate(classA);
return classA;
}
在 update 场景中,如果经过身份验证的用户将 ClassB 实例的 id 更改为属于另一个用户的 id,我们发现没有阻止用户的保护措施更新不属于他们的对象。有什么方法可以防止这种情况吗?防止这种情况发生的最佳做法是什么(即阻止他们更新其他用户 classB 详细信息)?
【问题讨论】:
标签: java spring hibernate spring-security jackson