Рубрики
Без рубрики

Весенняя охрана Помнит Меня

Куки помнит мой пример с Spring Security.

Автор оригинала: Eugen Paraschiv.

1. Обзор

В этом уроке будет показано, как включить и настроить функциональность Remember Me в веб-приложении с помощью Spring Security. Настройка приложения MVC с безопасностью и простой формой входа в систему уже обсуждалась.

Механизм сможет идентифицировать пользователя в течение нескольких сеансов – поэтому первое, что нужно понять, это то, что Remember Me срабатывает только после тайм-аута сеанса. По умолчанию это происходит после 30 минут бездействия, но тайм-аут можно настроить в web.xml .

Примечание: в этом руководстве основное внимание уделяется стандартному подходу на основе файлов cookie . Для постоянного подхода взгляните на руководство Spring Security – Persistent Remember Me .

2. Конфигурация Безопасности

Давайте посмотрим, как настроить конфигурацию безопасности с помощью Java:

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean("authenticationManager")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
            return super.authenticationManagerBean();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user1").password("{noop}user1Pass").roles("USER")
            .and()
            .withUser("admin1").password("{noop}admin1Pass").roles("ADMIN");
    }

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/anonymous*").anonymous()
            .antMatchers("/login*").permitAll()
            .anyRequest().authenticated()
            
            .and()
            .formLogin()
            .loginPage("/login.html")
            .loginProcessingUrl("/login")
            .failureUrl("/login.html?error=true")
            
            .and()
            .logout().deleteCookies("JSESSIONID")
            
            .and()
            .rememberMe().key("uniqueAndSecret")
            ;
    }
}

Как вы можете видеть, базовая конфигурация с использованием метода remember Me () | чрезвычайно проста, оставаясь при этом очень гибкой благодаря дополнительным опциям. Здесь важен ключ | – это секрет частного значения для всего приложения, и он будет использоваться при создании содержимого токена.

Кроме того, время действия токена может быть настроено по умолчанию от 2 недель до, например, одного дня с помощью tokenValiditySeconds() :

rememberMe().key("uniqueAndSecret").tokenValiditySeconds(86400)

Мы также можем взглянуть на эквивалентную конфигурацию XML:


    
    
    

    
    

    



    
        
            
            
        
    

3. Форма Входа В Систему

Форма входа аналогична той, которую мы использовали для входа в форму:





    

Login

User:
Password:
Remember Me:

Обратите внимание на недавно добавленный флажок | input – mapping в remember-me . Этого добавленного ввода достаточно, чтобы войти в систему с активацией remember me.

Этот путь по умолчанию также можно изменить следующим образом:

.rememberMe().rememberMeParameter("remember-me-new")

4. Файл Cookie

Механизм создаст дополнительный файл cookie – файл “запомни меня”-когда пользователь войдет в систему.

Файл cookie Remember Me содержит следующие данные:

  • имя пользователя – для идентификации вошедшего в систему участника
  • expirationTime – для истечения срока действия файла cookie; по умолчанию 2 недели
  • MD5 хэш – из предыдущих 2 значений – имя пользователя и Время истечения срока действия , плюс пароль и предопределенный ключ

Первое, на что следует обратить внимание, – это то, что и имя пользователя , и пароль являются частью файла cookie-это означает, что при изменении любого из них файл cookie больше не действителен. Кроме того, имя пользователя можно прочитать из файла cookie.

Кроме того, важно понимать, что этот механизм потенциально уязвим, если файл cookie remember me будет захвачен. Файл cookie будет действительным и пригодным для использования до истечения срока его действия или изменения учетных данных.

5. На практике

Чтобы легко увидеть, как работает механизм запоминания меня, вы можете:

  • войдите в систему с помощью remember me active
  • дождитесь истечения срока действия сеанса (или удалите файл cookie JSESSIONID в браузере)
  • обновите страницу

Без активности remember me после истечения срока действия файла cookie пользователь должен быть перенаправлен обратно на страницу входа . С помощью remember me пользователь теперь остается в системе с помощью нового токена/cookie.

6. Заключение

В этом руководстве показано, как настроить и настроить функциональность Remember Me в конфигурации безопасности, а также кратко описано, какие данные входят в файл cookie.

Реализацию можно найти в примере проекта Github – это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.

Когда проект выполняется локально, login.html можно получить доступ на localhost .