有人建议,不应将对象id发送到隐藏id标记中的视图,因为恶意用户可能会编辑源html并将数据提交(发布)回错误的记录,更好的方法是将对象存储在会话var中,直到它返回。
我读过这个答案,但对这个问题没有帮助。
我有一个dto occurrenceperson,它存储了事件的详细信息和人员集合。窗体控制器的设置如下:
班
@Component
@Controller
@SessionAttributes(value = { "user", "occModelView" })
public class FormController {
获取处理程序
@GetMapping("/occurence/{occeno}")
public String findOcc(@PathVariable String occno, @ModelAttribute("occViewModel") OccViewModel occViewModel, Model model, HttpSession session, SessionStatus sessionStatus) {
Occurence occ = occurenceRepository.findByoccno(occno);
occViewModel.setOccurence(occ);
occViewModel.setPersons(occPersonRepository.findOccPersonByEpisode(occurence.getId()));
model.addAttribute("occViewModel", occViewModel);
session.setAttribute("occViewModel", occViewModel);
sessionStatus.equals(occViewModel);
return "occurence";
岗位经办人
@PostMapping("newOccurence")
public String episodeSubmit(@Valid @ModelAttribute OccViewModel occViewModel, BindingResult result) {
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
for(ObjectError error : errors) {
}
return "occurence";
} else {
occService.saveNewOccurence(occViewModel.getOccurence(), occViewModel.getPersons());
return "redirect:/dash";
如何使用session vars从hibernate返回一个对象,然后将该对象返回hibernate,这样它就不会创建新对象了?
目前的情况是,如果我删除html中存储事件id和persons id的隐藏标记,并将数据提交回来,它将创建一个新的事件/persons。
1条答案
按热度按时间gfttwv5a1#
您可以将id存储在视图模型中-但不能在页面上公开-
occviewmodel occviewmodel-这是从findocc填充的dto,因此会有属性-
身份证件
其他值
然后就有了dto到jpa对象的Map
occviewmodel存储在session中并且包含id这一事实意味着您可以重新查找jpa模型,以确保它没有在其他地方被更新