Spring Boot + Spring MVC + пользовательский логин Thymeleaf завершается неудачно, без каких-либо ошибок в консоли - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать простой механизм регистрации / входа, используя Spring Boot + Thymeleaf.

Мне удалось успешно зарегистрировать пользователя (проверил новую запись в консоли h2), но у меня возникла проблема при попытке войти.

В частности, приложение перенаправлено на страницу ошибки / login? И на консоли нет сообщения о том, что не так.

После отладки я обнаружил, что приложение не останавливается на моем методе Post контроллера.

Я предоставляю вам мой код:

login.html

<form th:action="@{/login}" method="post" th:object="${user}">
            <div class="form-group">
                <label for="username">Username</label>
                <input th:field="*{username}" type="text" id="username" name="username" class="form-control" autofocus="autofocus"
                       placeholder="Username">
            </div>
            <div class="form-group">
                <label for="password">Password</label>:
                <input th:field="*{password}" type="password" id="password" name="password" class="form-control" placeholder="Password">
            </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-success"
                               value="Log In">
                    </div>
                    <div class="col-sm-6 col-sm-offset-3">
                        <a th:href="@{/register}">Register</a>
                    </div>
                </div>
            </div>
        </form>

UserController.java

    @Controller
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private SecurityService securityService;

    @GetMapping("/login")
    public String login(Model model) {
        model.addAttribute("user", new User());
        return "login";
    }

    @PostMapping("/login")
    public String login(@ModelAttribute("user") User user) {
        securityService.login(user.getUsername(), user.getPassword());
        return "redirect:/index";
    }

    @GetMapping("/register")
    public String register(Model model) {
        model.addAttribute("user", new User());
        return "register";
    }

    @PostMapping("/register")
    public String register(@ModelAttribute("user") User user) {
        userService.save(user);
        return "redirect:/login";
    }
}

Пожалуйста, помогите, заранее спасибо!

EDIT:

SecurityConfig.java

    @Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/h2-console/**", "/register**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll();

        http.csrf().disable();
        http.headers().frameOptions().disable();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
    }

    @Bean("authenticationManager")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

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

1 Ответ

0 голосов
/ 20 января 2019

Вам не нужно вводить логин самостоятельно.

Просто создайте login.html с формой, как это:

<form action="#" th:action="@{/login}" method="post">
    <input class="form-control" id="username" name="username" th:autofocus="true"/>
    <input class="form-control" id="password" name="password"                             
    <button>Login</button>
</form>

Пружина все сделает за вас.

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