gpt4 book ai didi

java - SpringSecurity RememberMeServices 不是通过注解注入(inject)的

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:55 24 4
gpt4 key购买 nike

我正在尝试配置 SpringSecurity 以使用 Remember Me 身份验证。

这是我的 Java 配置:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
UserDetailsService userDetailsService;
@Autowired
DatabasePersistentTokeRepositoryImpl databasePersistentTokeRepositoryImpl;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authenticationProvider(rememberMeAuthenticationProvider())
.rememberMe().tokenRepository(databasePersistentTokeRepositoryImpl).tokenValiditySeconds((int) TimeUnit.SECONDS.convert(7, TimeUnit.DAYS))
.and()
.csrf().disable();
}

@Bean()
public AuthenticationProvider rememberMeAuthenticationProvider() {
return new RememberMeAuthenticationProvider("KEY");
}

@Bean()
public TokenBasedRememberMeServices rememberMeServices() {
TokenBasedRememberMeServices rememberMeServices = new TokenBasedRememberMeServices("KEY", userDetailsService);
rememberMeServices.setAlwaysRemember(true);
return rememberMeServices;
}
}

我看到 rememberMeServices 没有注入(inject)到 RememberMeConfigurer 中。这会导致创建 RememberMeAuthenticationFilter,它引用了错误的 rememberMeServices。

Spring Security 文档中有一节使用 XML 描述了这个过程。 http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#session-mgmt

我的注入(inject)有什么问题,毕竟没有 XML 是否可以做到这一点?

最佳答案

您没有注入(inject)它。 RememberMeConfigurer 没有 Autowiring 。还有你为什么要配置这么多bean?

RememberMeAuthenticationProvider 已为您创建,如果您想使用不同的 key ,请使用 key("KEY") 指定它。这反过来将用于创建 RememberMeServices

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
UserDetailsService userDetailsService;
@Autowired
DatabasePersistentTokeRepositoryImpl databasePersistentTokeRepositoryImpl;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.rememberMe()
.key("KEY")
.tokenRepository(databasePersistentTokeRepositoryImpl)
.tokenValiditySeconds((int) TimeUnit.SECONDS.convert(7, TimeUnit.DAYS))
.and()
.csrf().disable();
}
}

如果您确实需要将 alwaysRemember 属性设置为 true,您可以使用 ObjectPostProcessor 对过滤器进行后处理并配置 RememberMeServices那里。

您还可能注入(inject)了错误类型的 RememberMeServices,因为配置的服务没有使用 PersistentTokeRepository

关于java - SpringSecurity RememberMeServices 不是通过注解注入(inject)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25785018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com