在Spring Security中,“Remember Me”(记住我)功能可以使用户在关闭浏览器后仍然保持登录状态。它通过在用户登录时生成一个简单的认证令牌(token)来实现。
要启用"Remember Me"功能,你需要进行以下配置:
在Spring Security配置类中启用"Remember Me"功能:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 其他配置...
.rememberMe();
}
// 其他配置...
}
配置RememberMeServices以定义令牌的持久化策略:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.rememberme.InMemoryTokenRepositoryImpl;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.security.web.authentication.rememberme.RememberMeServices;
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 其他配置...
.rememberMe()
.rememberMeServices(rememberMeServices())
.key("uniqueAndSecretKey");
}
private RememberMeServices rememberMeServices() {
TokenBasedRememberMeServices rememberMeServices = new TokenBasedRememberMeServices("uniqueAndSecretKey", userDetailsService(), tokenRepository());
rememberMeServices.setAlwaysRemember(true); // 设置为始终记住用户
return rememberMeServices;
}
private PersistentTokenRepository tokenRepository() {
return new InMemoryTokenRepositoryImpl(); // 使用内存存储令牌,也可以使用其他持久化方案
}
// 其他配置...
}
在上述配置中,我们使用了TokenBasedRememberMeServices作为RememberMeServices的实现类,并指定了一个唯一且保密的密钥(“uniqueAndSecretKey”)来生成和验证令牌。我们还设置了AlwaysRemember属性为true,以便始终记住用户。
此外,我们使用了InMemoryTokenRepositoryImpl作为PersistentTokenRepository的实现类,这意味着令牌将存储在内存中。你可以根据实际需求选择其他持久化方案