2016-03-22 4 views
0

Я указал tokenValiditySeconds из 1 в моей конфигурации безопасности Spring, но я продолжаю видеть, что значение по умолчанию 1209600 (найдено в org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices). У меня есть собственный класс «RememberMeService», который расширяет TokenBasedRememberMeServices (который, в свою очередь, расширяет AbstractRememberMeServices), но я не изменяю tokenValiditySeconds в своем классе ... Я просто ожидаю, что он будет установлен из моей конфигурации безопасности.Spring Security 4.0.3 memMe tokenValiditySeconds не работает

Все остальное работает отлично, за исключением tokenValiditySeconds. Я использую это специально для моего REST API (а не в веб-форме).

Как сделать tokenValiditySeconds Я указываю в моей конфигурации безопасности Spring в моем приложении RememberMeService? Вот мой configure() метод:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .headers() 
      .frameOptions() 
      .sameOrigin() 
     .and() 
      .authorizeRequests() 
      .antMatchers("/rest/**").hasRole("ADMIN") 
      .anyRequest().permitAll() 
     .and() 
      .csrf() 
      .disable() 
      .httpBasic() 
     .and() 
      .rememberMe() 
      .key(KEY) 
      .tokenValiditySeconds(1) 
      .userDetailsService(springUserDetailsService) 
      .rememberMeServices(new SpringRememberMeService(KEY, springUserDetailsService)) 
     .and() 
      .logout().disable(); 
} 

ответ

0

Решил указать tokenValiditySeconds в моем SpringRememberMeService классе, а не в rememberMe() configurer и это работает отлично. Обратите внимание, что я переопределяю пару классов в TokenBasedRememberMeServices для наших конкретных потребностей.

package com.avada.rest.security; 

import org.springframework.security.core.Authentication; 
import org.springframework.security.core.userdetails.UserDetailsService; 
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices; 

import javax.servlet.http.HttpServletRequest; 

public class SpringRememberMeService extends TokenBasedRememberMeServices { 

    public static final int TOKEN_VALIDITY_SECONDS = 60 * 30; // 30 minutes 

    public SpringRememberMeService(String key, UserDetailsService userDetailsService) { 
     super(key, userDetailsService); 
    } 

    @Override 
    protected String extractRememberMeCookie(HttpServletRequest request) { 
     String rememberMe = request.getHeader("remember-me"); 
     int startIndex = "remember-me=".length(); 
     int endIndex = rememberMe.indexOf("; ", startIndex); 
     return rememberMe.substring(startIndex, endIndex); 
    } 

    @Override 
    protected int calculateLoginLifetime(HttpServletRequest request, Authentication authentication) { 
     return TOKEN_VALIDITY_SECONDS; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^