假設我有兩個實體如下:確保認證的用戶只能更新自己的唱片
@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(使用Hibernate)以下被稱爲數據庫中的更新ClassA的:
@Override
public ClassA save(ClassA classA) {
sessionFactory.getCurrentSession().saveOrUpdate(classA);
return classA;
}
在更新情況下,如果經過身份驗證的用戶將ClassB
實例的id
更改爲屬於另一個用戶的id
,我們發現沒有任何保護措施阻止用戶更新不屬於它們的對象。有什麼方法可以防止這種情況發生?防止這種情況發生的最佳做法是什麼(即防止他們更新另一個用戶的詳細信息)?
謝謝你的回答,我很欣賞你在說什麼。在這種情況下,我們在控制器和DAO之間有一個服務層,因此在兩者之間使用邏輯就可以將其排除。我想問的是更多的問題是否可以自動讓hibernate(或者可能是spring/spring-security)爲你做這項工作?或者,如果這樣做的方法已知並記錄在某處。 –