Spring boot 将控制器中的信息持久化到Thymeleaf,然后将其发送到另一个控制器(Thymeleaf和Spring Boot)
我正在使用Spring Boot和Thymeleaf的恢复密码表单中工作,过程是后端向用户发送一个带有令牌的链接,该令牌与用户信息一起保存在数据库中。用户单击该链接,后端验证令牌,如果正确,它将使用用户信息重定向到“新密码”表单,用户必须引入新密码并重复。当用户引入密码并按save时,它将信息发送到后端,并使用用户ID搜索注册表并更改密码 在用户按下链接时验证令牌的控制器中,我搜索用户信息,并使用userId和密码null构建和使用usersRecoverPassDto,并组织模型对象将其发送到“new pass”表单,如下所示:Spring boot 将控制器中的信息持久化到Thymeleaf,然后将其发送到另一个控制器(Thymeleaf和Spring Boot),spring-boot,thymeleaf,Spring Boot,Thymeleaf,我正在使用Spring Boot和Thymeleaf的恢复密码表单中工作,过程是后端向用户发送一个带有令牌的链接,该令牌与用户信息一起保存在数据库中。用户单击该链接,后端验证令牌,如果正确,它将使用用户信息重定向到“新密码”表单,用户必须引入新密码并重复。当用户引入密码并按save时,它将信息发送到后端,并使用用户ID搜索注册表并更改密码 在用户按下链接时验证令牌的控制器中,我搜索用户信息,并使用userId和密码null构建和使用usersRecoverPassDto,并组织模型对象将其发送到
PasswordManagmentPostDto passManagment = new PasswordManagmentPostDto();
passManagment.setUserId(userId);
model.addAttribute ("passInfo", passManagment);
<form action="#" th:action="@{/password/recovery}" th:object="${passInfo}" method="post">
<div class="mb-2 mr-sm-2 mb-sm-0 position-reNew pass:</label>
<input type="password" th:field="*{newPassword}" placeholder="Contraseña" class="form-control">
</div>
<div class="mb-2 mr-sm-2 mb-sm-0 position-relative form-group">
<label for="repeatePass" class="mr-sm-2">Repeat pass:</label>
<input type="password" th:field="*{repeatNewPassword}" placeholder="Repita contraseña" class="form-control"/>
</div>
<div class="mb-2 mr-sm-2 mb-sm-0 mt-3 position-relative form-group">
<input name="submit" type="submit" value="Save" class="inputButton btn btn-success "/>
</div>
</form>
在“新通行证”表格中,我收到了正确的信息:
passInfo={
userId: 123456,
newPassword: null,
repeatePassword: null
}
“新通行证”表格I代码如下:
PasswordManagmentPostDto passManagment = new PasswordManagmentPostDto();
passManagment.setUserId(userId);
model.addAttribute ("passInfo", passManagment);
<form action="#" th:action="@{/password/recovery}" th:object="${passInfo}" method="post">
<div class="mb-2 mr-sm-2 mb-sm-0 position-reNew pass:</label>
<input type="password" th:field="*{newPassword}" placeholder="Contraseña" class="form-control">
</div>
<div class="mb-2 mr-sm-2 mb-sm-0 position-relative form-group">
<label for="repeatePass" class="mr-sm-2">Repeat pass:</label>
<input type="password" th:field="*{repeatNewPassword}" placeholder="Repita contraseña" class="form-control"/>
</div>
<div class="mb-2 mr-sm-2 mb-sm-0 mt-3 position-relative form-group">
<input name="submit" type="submit" value="Save" class="inputButton btn btn-success "/>
</div>
</form>
userId参数只是一个未经任何修改也未显示的参数,但我不知道如何将该值从控制器持久化到视图,然后再持久化到另一个控制器
我尝试向新的通行证表单添加另一个输入:
<input type="text" th:field="*{userId}" th:value="*{userId}" placeholder="userId" class="form-control"/>
我对这个输入什么也没做,只是输入了两个密码,然后按了保存按钮,它就工作了,我收到了带有正确信息的对象
当然,userId参数不能在表单中显示或修改
有人能帮我吗
提前非常感谢您旧答案 使用
隐藏的输入:
这是隐藏的
输入的一部分,用于维护应发送回控制器的数据,但用户无法查看/更改
新答案
根据我们在评论中的讨论,似乎合适的方法是在前端保留用户的令牌。在提交表单时将该令牌传递给控制器,然后通过该令牌查找用户以重置密码。旧答案
使用隐藏的输入:
这是隐藏的
输入的一部分,用于维护应发送回控制器的数据,但用户无法查看/更改
新答案
根据我们在评论中的讨论,似乎合适的方法是将用户的令牌保留在前端。在提交表单时将该令牌传递给控制器,然后通过该令牌查找用户以重置密码。但是使用隐藏
,我可以检查页面(F12用于Chrome),您可以获取用户ID并对其进行修改,然后修改查询以更改密码:
正确。如果不在前端对其进行管理,您无法保留用户ID
。据我所知,这是不可能的。知道用户ID
有什么害处?但问题是我可以更改密码用户id,当我按下保存按钮时,我可以更改另一个用户密码如果这是要更改当前登录用户的密码,只需在控制器中获取当前用户的用户id。不是要在当前会话中更改密码,例如,您尝试登录到任何网站,并且您在登录页面中,您忘记了您r密码,你按下“忘记密码”按钮,你提交你的邮件地址,他们会给你发送一封电子邮件,其中包含一个链接来还原你的密码,这样你就可以输入新密码,并在数据库中修改密码,这样,在还原密码的过程中你就不会登录。但是,使用隐藏,我可以检查页面(F12的Chrome),您可以获取用户ID并对其进行修改,然后修改查询以更改密码:
正确。如果不在前端对其进行管理,您无法保留用户ID
。据我所知,这是不可能的。知道用户ID
有什么害处?但问题是我可以更改密码用户id,当我按下保存按钮时,我可以更改另一个用户密码如果这是要更改当前登录用户的密码,只需在控制器中获取当前用户的用户id。不是要在当前会话中更改密码,例如,您尝试登录到任何网站,并且您在登录页面中,您忘记了您r密码,您按下“忘记密码按钮”,提交您的邮件地址,他们会向您发送一封电子邮件,其中包含一个链接,用于恢复您的密码,以便您输入新密码,并在数据库中修改密码,以便在恢复密码过程中您不会登录。