0
有人建议,不应将对象ID发送到隐藏的Id标记中的视图,因为恶意用户可以编辑源html并将数据提交(发布)回错误记录,并且更好的方法是将对象存储在会话变量中,直到它返回。春季会议存储对象
我已阅读此SO answer但它并没有帮助我在这个问题上。
我有一个DTO OccurencePerson存储发生的细节和人的集合。形式控制器的设置是这样的:
CLASS
@Component
@Controller
@SessionAttributes(value = { "user", "occModelView" })
public class FormController {
GET HANDLER
@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";
POST HANDLER
@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,使其不创建新对象?
现在,如果我删除存储发生id的html中的隐藏标签,并将个人id和数据提交回来,它会创建一个新的发生/人员。
有几点注意事项:1.您可以使用“merge()”而不是save/persist更新现有对象的值。 2.恕我直言,可以在视图中使用对象标识符,系统必须授权访问权限3.只是一个想法 - JSF使用加密和签名的视图状态在请求之间传递视图模型。 – gusto2
您的关系是否在JPA中正确注释?你可以发布内部occService.saveNewOccurence(),因为我认为你将这些对象附加到休眠会话中。 – aksappy