【问题标题】:Spring Security 4.0.3 rememberMe tokenValiditySeconds not workingSpring Security 4.0.3 rememberMe tokenValiditySeconds 不起作用
【发布时间】:2016-07-09 15:23:22
【问题描述】:

我在 Spring Security Config 中指定了 1 的 tokenValiditySeconds,但我一直看到默认值 1209600(在 org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices 中找到)出现。我有一个自定义的“RememberMeService”类,它扩展了TokenBasedRememberMeServices(它又扩展了AbstractRememberMeServices),但我没有在我的课堂上更改tokenValiditySeconds...我只是希望它可以从我的安全性中设置配置。

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

如何使我在 Spring Security Config 中指定的 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();
}

【问题讨论】:

    标签: java spring rest spring-security spring-rest


    【解决方案1】:

    决定在我的SpringRememberMeService 类而不是rememberMe() 配置器中指定tokenValiditySeconds,这工作正常。请注意,我将覆盖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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2017-06-08
      • 2018-06-26
      • 2015-08-27
      • 2013-04-28
      相关资源
      最近更新 更多