我在一个HTML中有两种不同的形式。一个是登录,它确实有效,但另一个是注册,当我提交表单时,它永远不会进入后置控制器进行/注册操作。
LoginController.java
z <- read.zoo(d)
x <- time(z)
autoplot(z, geom = c("line", "point")) +
scale_x_yearmon(breaks = x, lab = format(x, ifelse(cycle(x) == 1, "%b\n%Y", "%b"))) +
xlab("")
login.html ,在这里您可以看到两个表单,第一个是登录工作的人,另一个是登记表。当我在调试时单击提交按钮时,它永远不会进入我之前写过的公共User signupSubmit函数。
@Resource
UserFacade userFacade;
@GetMapping("/login")
public String signupForm(Model model) {
model.addAttribute("newuser", new User());
return "login";
}
@PostMapping("/register")
public User signupSubmit(@ModelAttribute("newuser") User user) {
userFacade.saveUser(user);
return user;
}
我的Spring安全配置
<form id="login-form" th:action="@{/login}" method="post" style="display: block;">
<div class="form-group">
<input type="text" name="username" id="username" tabindex="1" class="form-control"
placeholder="Email" value="">
</div>
<div class="form-group">
<input type="password" name="password" id="password" tabindex="2" class="form-control"
placeholder="Contraseña">
</div>
<div class="form-group">
<input type="checkbox" tabindex="3" class="" name="remember-me" id="remember"> <label
for="remember"> Recuérdame</label>
<div align="center" th:if="${param.error}">
<p style="font-size: 15; color: #FF1C19;">Email o contraseña incorrectos</p>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<input type="submit" name="login-submit" id="login-submit"
class="form-control btn btn-login" value="Iniciar sesión">
</div>
</div>
</div>
</form>
<!-- ======================= REGISTRO ============================ -->
<form id="register-form" th:action="@{/register}" th:object="${newuser}" method="post" role="form"
style="display: none;">
<div class="form-group">
<input type="text" th:field="*{email}" name="email" id="email" class="form-control"
placeholder="Email" tabindex="1">
</div>
<div class="form-group">
<input type="text" th:field="*{name}" name="name" id="name" class="form-control"
placeholder="Nombre" tabindex="2">
</div>
<div class="form-group">
<input type="text" th:field="*{lastName}" name="lastName" id="lastName" class="form-control"
placeholder="Apellido" tabindex="3">
</div>
<div class="form-group">
<input type="password" th:field="*{password}" name="password" id="password"
class="form-control" placeholder="Contraseña" tabindex="4">
</div>
<div class="form-group">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<input type="submit" name="register-submit" id="register-submit"
class="form-control btn btn-register" value="Registrarse">
</div>
</div>
</div>
</form>
答案 0 :(得分:0)
在您的安全配置中,您通过添加单个.anyRequest().authenticated()
并且没有任何其他安全规则来保护所有网址。
因此,您需要通过身份验证才能访问/register
,并且由于您未获得授权,您将再次重定向到输入页面并基本保持在该循环中。您需要通过添加其他安全规则来打开/register
网址。添加antMatcher("/register").permitAll()
应该可以解决问题。
注意:添加安全规则时,定义规则的顺序非常重要。安全规则也按其定义的顺序进行考虑。因此,如果您的.anyRequest().authenticated()
是第一个规则,那么之后的任何规则都是无用的。因此在添加规则时要注意顺序。
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**", "/vendor/**", "/fonts/**", "/register").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().permitAll()
.and().rememberMe().key("uniqueAndSecret");
}
将/register
添加到允许所有访问权限的已有antMatchers
也可以。