Когда я отправляю свою регистрационную форму, она не выполняет почтовый контроллер - PullRequest
0 голосов
/ 05 июня 2018

У меня есть две разные формы в одном HTML.Один из них - Логин, и он работает, но другой - Регистрация, и когда я отправляю форму, он никогда не отправляется в почтовый контроллер для действия / регистрация.

LoginController.java

@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;
}

login.html , здесь вы можете увидеть обе формы, первая - это логин того, кто работает, а другая - форма регистрации.Когда я нажимаю кнопку «Отправить» во время отладки, она никогда не переходит в публичную функцию userupSubmit, которую я написал ранее.

<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>

My Spring config config

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/css/**", "/js/**", "/images/**", "/vendor/**", "/fonts/**").permitAll()
                .anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout()
                .permitAll().and().rememberMe().key("uniqueAndSecret");
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().usersByUsernameQuery("select email, password, active from user where email=?")
                .authoritiesByUsernameQuery(
                        "select u.email, r.role from user u inner join user_role ur on(u.user_id=ur.user_id) inner join role r on(ur.role_id=r.role_id) where u.email=?")
                .dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
    }
}


@Configuration
public class MvcConfig implements WebMvcConfigurer {

    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        return bCryptPasswordEncoder;
    }

}

1 Ответ

0 голосов
/ 06 июня 2018

В вашей конфигурации безопасности вы защитили все свои URL-адреса, добавив один .anyRequest().authenticated() и без каких-либо дополнительных правил безопасности.

Следовательно, вам необходимо пройти аутентификацию для доступа к /register, и, поскольку вы не авторизованы, вы снова будете перенаправлены на страницу входа и в основном останетесь в этом цикле.Вам необходимо открыть URL-адрес /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, которое разрешает любой доступ, также поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...