если сеанс удален, то запомнить меня повар ie также удаляется - PullRequest
0 голосов
/ 20 февраля 2020

Я изучаю Spring Security. У меня вопрос по поводу функции запомнить меня.

Вот мой частичный источник.

Если я закрою браузер и открою новый, значение сеанса cook ie будет таким же. Если я удаляю сессионный повар ie, используя logout(.deleteCookies("JSESSIONID")), то помните, что повар ie также удаляется.

Мне нужно ниже,

Если браузер закрыт, а новый открыт, Значение сеанса повара ie отличается. Если сессия повара ie удаляется с помощью выхода из системы, запомните повара ie.

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    AuthenticationService authenticationService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/resource/**", "/login", "/login-error").permitAll()

                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")

                .anyRequest().authenticated()
                .and()
            .formLogin()
                .failureUrl("/login?error")
                .defaultSuccessUrl("/main", true)
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout")
                .deleteCookies("JSESSIONID")
                .permitAll()
                .and()
            .rememberMe()
                .rememberMeParameter("remember-me")
                .tokenValiditySeconds(60*2)
                .tokenRepository(persistentTokenRepository());

        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.NEVER);
        http
            .exceptionHandling()
                .accessDeniedPage("/login?error");
        http
            .sessionManagement()
                .invalidSessionUrl("/login");
    }

    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl db = new JdbcTokenRepositoryImpl();
        db.setDataSource(dataSource);
        return db;
    }


    ... (other source)

1 Ответ

1 голос
/ 20 февраля 2020

Если вы используете свободный API, по умолчанию ваш повар-помощник ie удален, см. Ссылка Spring Security :

10.24.1 Выход из системы Java Конфигурация

При использовании WebSecurityConfigurerAdapter автоматически применяются возможности выхода из системы. По умолчанию доступ к URL-адресу /logout приведет к выходу пользователя из системы с помощью:

  • аннулирования сеанса HTTP
  • Очистка любой настроенной аутентификации RememberMe, настроенной
  • Очистка перенаправления SecurityContextHolder
  • на /login?logout

Но похоже, что вы могли бы сделать это с помощью собственной реализации RememberMeServices см. Spring Security Reference :

services-ref Позволяет полностью контролировать реализацию RememberMeServices, которая будет использоваться фильтром. Значение должно быть идентификатором компонента в контексте приложения, который реализует этот интерфейс. Также следует реализовать LogoutHandler, если используется фильтр выхода из системы.

...