Spring boot весеннее приложение безопасности перезагружает страницу входа в систему, вместо того, чтобы успешно или не работать - PullRequest
0 голосов
/ 19 июня 2019

Я попытался заменить экран входа в систему безопасности Spring своим собственным.Хотя по умолчанию один работает отлично, мой собственный, похоже, не реагирует на размещение формы.Он просто перезагружает экран входа в систему.

login.mustache:

{{> partials/header}}
<body class="grey lighten-4">
<div class="container">
    <form action="/login" method="POST">
        <div class="md-form">
            <input type="text" name="username" id="loginField" class="form-control">
            <label for="loginField">Login</label>
        </div>
        <div class="md-form">
            <input type="password" name="password" id="passwordField" class="form-control">
            <label for="passwordField">Password</label>
        </div>
        <button class="btn red text-white float-right" type="submit">Log in</button>
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    </form>
</div>
</body>
{{> partials/footer}}

LoginController.kt

import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.ui.Model
import org.springframework.ui.set

@Controller
class LoginController {

    @GetMapping("/login")
    fun loginPage(model: Model): String {
        return "login"
    }
/*
    @PostMapping("/login")
    fun loginForm() {
        print("post")
    }*/
}

Он даже не вызывает точку останова в текущем комментариичасть при отправке формы.

SecurityConfig.kt

import org.springframework.context.annotation.Configuration
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
import org.springframework.security.core.userdetails.User
import org.springframework.security.provisioning.InMemoryUserDetailsManager

@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {

    override fun configure(http: HttpSecurity) {
        http.authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/test")
                .permitAll()
    }

    override fun configure(auth: AuthenticationManagerBuilder) {
        auth.userDetailsService(
                InMemoryUserDetailsManager(
                        User.withUsername("user").password("user").authorities(mutableListOf()).build()
                )
        )
    }
}

Я подозреваю, что мне не хватает какой-то важной части для получения и обработки содержимого формы правильно.Однако, пройдя около 10 уроков по этому вопросу, я обнаружил, что между ними так много несоответствий, что я, честно говоря, потерян.

1 Ответ

0 голосов
/ 19 июня 2019

Кажется, вы используете неправильный синтаксис усов для параметра csrf. Вам необходимо {{ для рендеринга переменной контекста.

<input type="hidden" name="{{_csrf.parameterName}}" value="{{_csrf.token}}"/>

Кроме того, вам необходимо скопировать объект "_csrf" в модель MVC, добавив этот параметр к вам application.properties.

spring.mustache.expose-request-attributes=true

Наконец, вы можете увидеть IllegalArgumentException, потому что вы не указали кодировщик пароля. Если это произойдет, вы увидите ошибку в вашей трассировке стека. Это можно исправить, указав PasswordEncoder.

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