2016-03-22 22 views
0

私はSpring Security ConfigでtokenValiditySecondsを1に指定しましたが、デフォルトの1209600(org.springframework.security.web.authentication.rememberme.AbstractRememberMeServicesにあります)が表示され続けます。 TokenBasedRememberMeServices(それはAbstractRememberMeServicesを拡張します)を拡張するカスタム "RememberMeService"クラスがありますが、私のクラスでtokenValiditySecondsを変更していません...私はそれを私のSecurity Configから設定すると予想しています。スプリングセキュリティ4.0.3 rememberMe tokenValiditySecondsが機能しない

tokenValiditySeconds以外は他のすべてが正常に動作しています。私はこれをWebフォームではなくREST APIに使用しています。

私のRememberMeServiceにSpring Security Configを適用するには、tokenValiditySecondsを指定するにはどうすればよいですか?ここに私のconfigure()方法であって、私のSpringRememberMeServiceクラスではなく、rememberMe()コンフィギュラにtokenValiditySecondsを指定することを決定し、これが正常に動作している

@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

。私は、具体的なニーズに合わせて、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; 
    } 
} 
関連する問題