spring会话

ncgqoxb0  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(367)

有人建议,不应将对象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。

gfttwv5a

gfttwv5a1#

您可以将id存储在视图模型中-但不能在页面上公开-
occviewmodel occviewmodel-这是从findocc填充的dto,因此会有属性-
身份证件
其他值
然后就有了dto到jpa对象的Map
occviewmodel存储在session中并且包含id这一事实意味着您可以重新查找jpa模型,以确保它没有在其他地方被更新

相关问题