当我提交我的注册表时,它不会执行帖子控制器

时间:2018-06-05 11:53:00

标签: spring spring-mvc spring-boot spring-security thymeleaf

我在一个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>

1 个答案:

答案 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也可以。