Как вызвать метод поста контроллера с пользовательской формой входа в систему при весенней загрузке - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в Spring Security.У меня есть простое приложение mvc, и проблема возникает, когда я хочу вызвать метод post контроллера, значение запроса сопоставления которого совпадает со значением loginProcessingUrl.

Класс контроллера:

@Controller
public class LoginController {

    @RequestMapping(value = "/showlogin", method = RequestMethod.GET)
    public String showLogin() {
        System.out.println("Showing login...");
        return "login";
    }

    // this method is not being invoked
    @RequestMapping(value = "/authuser", method = RequestMethod.POST)
    public void printUserData() {
        System.out.println("Printing user data...");
    }
}

Класс конфигурации:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        User.UserBuilder users = User.withDefaultPasswordEncoder();

        auth.inMemoryAuthentication()
              .withUser(users.username("dejan").password("dejan").roles("EMPLOYEE"))
                .withUser(users.username("marko").password("marko").roles("ADMINISTRATOR"));
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/showlogin")
                .loginProcessingUrl("/authuser")
                .permitAll()
                .and()
                .csrf().disable();
    }
}

Страница входа в систему:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form th:action="@{/authuser}" method="post">
        Username: <input type="text" name="username" />
        Password: <input type="password" name="password" />
        <input type="submit" value="Login" />
    </form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

В AbstractAuthenticationProcessingFilter есть свойство с именем continueChainBeforeSuccessfulAuthentication. Но, похоже, это не раскрывает никакой конфигурации по этому поводу,

Таким образом, вам нужно создать UsernamePasswordAuthenticationFilter самостоятельно вместо formLogin и установить continueChainBeforeSuccessfulAuthentication на true

0 голосов
/ 24 апреля 2019

Я думаю, ваша проблема здесь:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().authenticated()
            ...

}

Измените это на:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .and()
            .formLogin()
            .loginPage("/showlogin")
            .loginProcessingUrl("/authuser")
            .permitAll()
            .and()
            .anyRequest().authenticated()
            .csrf().disable();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...