Соединение с сервером потеряно после успешного входа в Spring Security - PullRequest
0 голосов
/ 01 мая 2018

После успешного входа в систему с помощью Spring security я потеряю соединение, и мой клиент пытается восстановить соединение. Это мой конфигурационный файл:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery(
                        "select nickname,password, true from client where nickname=?")
                .authoritiesByUsernameQuery(
                        "select username, role from user_roles where username=?");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/login")
                .permitAll()
                .antMatchers("/*")
                .access("hasRole('ROLE_USER')");
        http.formLogin()
                .defaultSuccessUrl("/", true);
    }

    @Bean
    public static NoOpPasswordEncoder passwordEncoder() {
        return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
    }
}

Я использую поток Ваадина. После успешного входа в систему будет показана моя базовая страница, но сразу после этого она потеряет соединение и начнет повторное соединение в бесконечном цикле.

Это заголовок моей корневой страницы.

@Route(value = "")
public class BasePageView extends VerticalLayout

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Добавьте это http.csrf().disable() к вашему configure методу в SecurityConfig.

Я не знаю точно, почему это не работает без этого. Если это специфично для Vaadin Flow или нет Может быть, кто-то еще поможет нам понять.

0 голосов
/ 02 мая 2018

Я думаю, вы должны переопределить метод суперкласса

protected void configure(AuthenticationManagerBuilder auth) throws Exception

вместо public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception

Например, этот образец работает для меня:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {    
 auth.inMemoryAuthentication().withUser("user").password("test").roles("USER");
    }

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/login")
            .permitAll()
            .antMatchers("/*")
            .access("hasRole('ROLE_USER')");
    http.formLogin()
            .defaultSuccessUrl("/", true);
}
}

также дважды проверьте правильность имени вашей роли в вашей базе данных, и я думаю, что вы должны установить antMatchers на / ** вместо / * для обработки многоуровневого URL

...