我有这个Spring + Thymeleaf项目,用户必须回答问题,之后他/她可以填写表格。 我想限制对此表单页面(/finish.html)的访问,因此您无法通过在浏览器中键入它来直接访问它,您必须正确回答问题。 我有这段代码,
Long max = difficultyLevels.stream().map(d -> d.getLevel()).max(Long::compareTo).get();
if (levelId > max) {
return "redirect:/finish";
}

我想我应该添加一些内容来授予对/finish.html -page的访问权限。但我是怎么做到的?
答案 0 :(得分:0)
重定向会导致新的客户端请求。因此,如果您想要安全地保护/ finish端点,有一些策略:
您可以在会话中放置一个值,您可以在渲染页面之前在/ finish控制器中检查该值。
您还可以使用重定向属性来传递某种加密令牌,并在完成控制器中检查它。请参阅What are ways for pass parameters from controller after redirect in spring mvc?。
您也可以使用转发而不是重定向。您可以按照此处所述向servlet请求添加数据:Spring forward with added parameters?。这可能不适合您,因为它不会更改浏览器网址。