Как выполнить автоматический вход в систему (запомнить меня) с настраиваемой аутентификацией в Spring? - PullRequest
0 голосов
/ 26 ноября 2018

Я пишу WebApp с помощью Spring.Я создал пользовательский логин (почему это неважно), который работает.Тогда теперь я хочу добавить функцию запомнить меня.Мне удалось установить cookie, но теперь я не знаю, как автоматически войти в систему пользователя.Так как мне войти в систему пользователя, когда он снова заходит на сайт?

Вот мой метод аутентификации:

public boolean authenticate(String username, String password) {
    try {
        AuthenticatedUser user = authService.loadUserByUsername(username);
        if (new BCryptPasswordEncoder().matches(password, user.getPassword())) {
            Authentication auth = new UsernamePasswordAuthenticationToken(
                    user.getUsername(), user.getPassword(), user.getAuthorities());

            rememberMeService.loginSuccess(request, response, auth);
            SecurityContextHolder.getContext().setAuthentication(auth);

            return true;
        }
        return false;
    } catch (UsernameNotFoundException e) {
        return false;
    }
}

А вот моя веб-конфигурация:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable()
      .authorizeRequests()
        .antMatchers("/VAADIN/**", "/HEARTBEAT/**", "/UIDL/**", "/resources/**", "/manifest.json", "/icons/**",
                "/images/**",
                "/frontend/**",
                "/webjars/**",
                "/h2-console/**",
                "/frontend-es5/**", "/frontend-es6/**",
                "/signup", "/signup**", "/signup/**", "/")
    .permitAll()
    .anyRequest().authenticated()
    .and()
    .formLogin().loginPage("/login").permitAll()
    .and()
    .rememberMe().rememberMeServices(rememberMeService())
    .and()
    .logout().permitAll();
}

@Bean
public TokenBasedRememberMeServices rememberMeService() {
    TokenBasedRememberMeServices tbrms = 
            new TokenBasedRememberMeServices("rememberMe", userDetailsService);
    tbrms.setAlwaysRemember(true);
    return tbrms;
}

1 Ответ

0 голосов
/ 26 ноября 2018

Это то, что у меня есть в моем приложении:

В вашей веб-конфигурации

rememberMe().key("superUniqueAndSecretKey")

И вы также должны добавить флажок запомнить меня в форме входа в систему (я полагаю, выотсутствует это)

<input type="checkbox" name="remember-me" />

(имя remember-me по умолчанию для пружины 5)

Проверьте это https://www.baeldung.com/spring-security-remember-me

...