我的控制器中有以下方法。
@GetMapping("/update/{idpost}")
public String showUpdateForm(
@PathVariable int idpost,
@ModelAttribute("post") Post post,
@ModelAttribute("user") User user,
Model model) {
post = postService.findById(idpost);
model.addAttribute("post", post);
return "_updateForm";
}
它显示用于更新现有帖子的表单。
我想将访问权限限制为仅发布此帖子的用户。这样随机的用户将无法访问。
所以我尝试了这个。.旨在使当前用户的电子邮件(authentication.name)与帖子所有者的电子邮件相对应。但没有运气。
@PreAuthorize("#post.user.email == authentication.name")
@GetMapping("/update/{idpost}")
public String showUpdateForm(
@PathVariable int idpost,
@ModelAttribute("post") Post post,
@ModelAttribute("user") User user,
Model model) {
post = postService.findById(idpost);
model.addAttribute("post", post);
return "_updateForm";
}
事实证明, post 参数具有空值。这很明显,因为它是在 方法中定义的。 (或者我完全错误地使用它的方式。)
你能明白我在做什么吗?我该如何使用@PreAuthorize?
答案 0 :(得分:0)
我在想PostAuthorize
是您想要的。注意:我自己没有使用此注释,但这就是它的提示。如果您还不满意,请告诉我,我可以进行进一步调查,看看是否可以为您提供样本。
PS。不要忘记启用PostAuthorize @EnableGlobalMethodSecurity(prePostEnabled = true)
@PostAuthorize("#returnObject.user.email == authentication.name")
public Post getPost(int idpost) {
return postService.findById(idpost);
}
@GetMapping("/update/{idpost}")
public String showUpdateForm(
@PathVariable int idpost,
@ModelAttribute("user") User user,
Model model) {
post = getPost(idpost);
model.addAttribute("post", post);
return "_updateForm";
}
答案 1 :(得分:0)
我使用RequestParam解决了这个问题。
@PreAuthorize("#userid == #user.id")
@GetMapping("/update/{idpost}")
public String showUpdateForm(
@PathVariable int idpost,
@ModelAttribute("post") Post post,
@ModelAttribute("user") User user,
@RequestParam("u") int userid,
Model model) {
post = postService.findById(idpost);
model.addAttribute("post", post);
return "_updateForm";
}
request uri可能是这样的。
http://localhost:8080/...../update/31?u=83