Spring 安全 4.0.3 rememberMe tokenValiditySeconds 不工作

Spring Security 4.0.3 rememberMe tokenValiditySeconds not working

我在我的 Spring 安全配置中指定了 1 的 tokenValiditySeconds,但我一直看到默认值 1209600(在 org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices 中找到)出现。我有一个扩展 TokenBasedRememberMeServices 的自定义 "RememberMeService" class(它又扩展了 AbstractRememberMeServices),但我没有更改 [=28= 中的 tokenValiditySeconds ]...我只是希望它可以从我的安全配置中设置。

tokenValiditySeconds 外其他一切正常。我专门为我的 REST 使用它 API(而不是在 Web 表单中)。

如何使我在 Spring 安全配置中指定的 tokenValiditySeconds 应用到我的 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();
}

决定在我的 SpringRememberMeService class 中而不是在 rememberMe() 配置器中指定 tokenValiditySeconds,这工作正常。请注意,为了满足我们的特定需求,我正在覆盖 TokenBasedRememberMeServices 中的几个 classes。

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;
    }
}