Конфигурация WebSecurityConfigurerAdapter для входа - PullRequest
2 голосов
/ 05 июня 2019

Я пытаюсь настроить Spring Secutiry в моем приложении SpringBoot 2.

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/", "/registration").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                .loginPage("/login").permitAll()
                .defaultSuccessUrl("/users")
            .and()
                .logout().permitAll();
    }

    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user =
                User.withDefaultPasswordEncoder()
                        .username("u")
                        .password("p")
                        .roles("USER")
                        .build();

        return new InMemoryUserDetailsManager(user);
    }
}


@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
    }
}

login.mustache

<form method="post" action="/login">
        <input type="text"     name="username" id="username" placeholder="Login" /><br>
        <input type="password" name="password" id="password" placeholder="Password" /><br>
        <input type="hidden" name="_csrf" value="{{_csrf.token}}">
        <button type="submit">Login</button>
</form>

Я ожидаю, что будет перенаправлен на / users page.Но на самом деле я получаю код ошибки = 302 и появляюсь в / login / error

РЕШЕНИЕ: Я добавил аннотацию @Bean к userDetailsService (), и это помогло.

1 Ответ

2 голосов
/ 05 июня 2019

Вы должны представить свой UserDetailsService как компонент, см. Ссылка на загрузку Spring :

84.2 Измените AuthenticationManager и добавьте учетные записи пользователей

Если вы предоставите @Bean типа AuthenticationManager, AuthenticationProvider или UserDetailsService, значение по умолчанию @Bean для InMemoryUserDetailsManager не будет создано, поэтому у вас есть полный набор функций Spring Security.доступны (например, различные варианты аутентификации).

Самый простой способ добавить учетные записи пользователей - это предоставить свой собственный UserDetailsService bean.

Ваш измененный код:

@Bean
@Override
public UserDetailsService userDetailsService() {
    UserDetails user =
            User.withDefaultPasswordEncoder()
                    .username("u")
                    .password("p")
                    .roles("USER")
                    .build();

    return new InMemoryUserDetailsManager(user);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...