我希望在多个页面上显示我的登录表单(例如),并且我希望使用当前用户的登录信息预先填充它(假设用户是通过cookie识别的)。但我不希望每个可能页面的每个控制器方法都必须为表单提供LoginForm bean。在提交表单时,我确实需要所有验证魔术,然后当然我希望表单的结果在用户提交时与用户所在的页面相同。
我现在无法弄清楚如何实现这一目标。它甚至可能吗?
编辑:
我有一个像这样的Thymeleaf形式:
<form action="#" data-th-action="@{/users/login}" data-th-object="${loginForm}" method="post">
<input type="text" placeholder="Email or Username" data-th-field="${loginForm.login}">
<input type="password" placeholder="Password" data-th-field="${loginForm.password}">
<button type="submit" name="login">Sign in</button>
<button type="submit" name="register">Register</button>
</form>
如果我没有创建LoginForm
(我的类)bean并将其粘贴在loginForm
下的模型中,那么在渲染页面时我会在GET上获得异常。
答案 0 :(得分:0)
您不需要将LoginForm传递给多个控制器,而是可以通过验证所需网址的登录表单,使用http过滤器将代码集中在一个地方,如下所示:
LoginFormValidationFilter类:
let link = ['/somelocation', this.param, this.param];
this.router.navigate(link);
<a (click)="thefunctionwheretheaboveishappening()">Some Description</a>
Web.xml过滤器映射:
@Component
public class LoginFormValidationFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getRequestURL();
if(url.equals(YOUR_LOGIN_URL)) {
//validate the request here for the required urls
//If request is invalid, send an error message back
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}