我正在嘗試將一些值從視圖發送到控制器,但是該值未在視圖中使用。
看法:
<form th:action="@{/changePassword}" th:object="${user}" method="post">
<div class="col-md-6 form-group">
<label>Old Password</label>
<input type="text" class="form-control" th:name="oldPassword">
</div>
<div class="col-md-6 form-group">
<label>New Password</label>
<input type="password" class="form-control" th:name="password">
</div>
<div class="col-md-6 form-group">
<label>Confirm Password</label>
<input type="password" class="form-control" >
</div>
<button type="submit" onclick="savePass()">Change Password</button>
</form>
和控制器中的方法
@PostMapping("/changePassword")
public String updatePassword(@ModelAttribute("user") User user, Model model) {
model.addAttribute("user", user);
user.setPassword(passwordEncoder.encode(user.getPassword()));
userService.changeUserPassword(user.getUsername(), user.getPassword());
return "display";
}
和帶有id、username、password和欄位的簡單模型。oldPasswordenable
我知道我可以通過查看登錄用戶,[[${#httpServletRequest.remoteUser}]]但如何將其放入模型并發送到控制器。在除錯期間使用實際代碼,我可以看到password并且oldPassword已設定但username = null.
我可以補充:
<div class="col-md-6 form-group">
<label>Username</label>
<input type="text" class="form-control" th:name="username">
</div>
但我不希望用戶輸入他的用戶名,我知道誰已登錄以及誰想更改密碼。
uj5u.com熱心網友回復:
無需將用戶從視圖發送到控制器。只需@AuthenticationPrincipal在您的控制器中使用:
@PostMapping("/changePassword")
public String updatePassword(@AuthenticationPrincipal MySecurityUser securityUser,
@ModelAttribute("user") User user,
Model model) {
model.addAttribute("user", user);
user.setPassword(passwordEncoder.encode(user.getPassword()));
userService.changeUserPassword(user.getUsername(), user.getPassword());
return "display";
}
要使用的實際類(MySecurityUser在示例中)將取決于您設定安全性的方式。如果您不知道,請鍵入Object并列印出類名或使用除錯器查看實際使用的類名。
有關更多資訊,請參閱https://docs.spring.io/spring-security/reference/servlet/integrations/mvc.html#mvc-authentication-principal。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527498.html
