При условии, что вы находитесь в контексте приложения Spring MVC, перенаправления могут быть реализованы с использованием RedirectView
или просто с префиксом redirect:
в качестве возвращаемого значения метода контроллера.Поймайте его как RequestParam
во время инициализации формы и сохраните его в сеансе, как показано в следующем примере:
Модель:
public class LoginForm implements Serializable {
private String username;
private String password;
private String redirectUrl;
// getters and setters omitted
}
Просмотр:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form:form method="POST" modelAttribute="loginForm" acceptCharset="UTF-8" action="login/doLogin">
<table>
<tr>
<td><form:label path="username">User Name</form:label></td>
<td><form:input path="username"/></td>
</tr>
<tr>
<td><form:label path="password">Password</form:label></td>
<td><form:password path="password"/></td>
</tr>
</table>
<div>
<input type="submit" value="Submit"/>
</div>
</form:form>
</body>
</html>
Контроллер:
@Controller
@RequestMapping("login")
@SessionAttributes(LoginController.FORM_NAME)
public class LoginController {
static final String FORM_NAME = "loginForm";
private static final String DEFAULT_REDIRECT_URL = "https://google.com";
@ModelAttribute(FORM_NAME)
public LoginForm createForm() {
return new LoginForm();
}
@GetMapping
public String showForm(Model model, @ModelAttribute(FORM_NAME) LoginForm loginForm, @RequestParam(required = false) String redirectUrl) {
loginForm.setRedirectUrl(redirectUrl);
model.addAttribute(FORM_NAME, loginForm);
return "login/login-form";
}
@PostMapping("/doLogin")
public String processFormCredentials(LoginForm loginForm) {
// input validation omitted ...
return "redirect:" + (loginForm.getRedirectUrl() != null ? loginForm.getRedirectUrl() : DEFAULT_REDIRECT_URL);
}
}
При использовании этого кода перенаправление с umlauts прекрасно работает на Tomcat - http://<url>/login?redirectUrl=http%3A%2F%2Fwww.example.com%2F%25C3%25B6l%2F
перенаправляет при отправке формы наhttp://www.example.com/öl/
.