gpt4 book ai didi

java - 仅限 Spring Security SessionRegistry java 配置

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:11 26 4
gpt4 key购买 nike

有人可以提供关于如何仅使用 java 配置在 Spring Security 中获取非空 SessionRegistry 对象(没有任何 XML)的真实工作代码片段。

我正在使用 Spring Security v4.0.1.RELEASE

以及我尝试做的事情:

  1. 使用 Apache Commons Lang 在 UserDetails 中实现 hashCode() 和 equals() 方法:


@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, "password", "id", "role", "description", "registrationDate", "enabled");
}

@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj, "password", "id", "role", "description", "registrationDate", "enabled");
}

  1. 启用 HttpSessionEventPublisher:


public class AppSecurityInitializer extends
AbstractSecurityWebApplicationInitializer {

@Override
protected boolean enableHttpSessionEventPublisher() {
return true;
}
}

  1. 在安全配置类中定义的 bean:


@Bean
public SessionRegistry getSessionRegistry() {
return new SessionRegistryImpl();
}

@Bean
public SessionAuthenticationStrategy getSessionAuthStrategy(SessionRegistry sessionRegistry) {
ConcurrentSessionControlAuthenticationStrategy controlAuthenticationStrategy =
new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry);

return controlAuthenticationStrategy;
}

  1. 设置http安全:

httpSecurity
.formLogin().loginPage("/login")
.defaultSuccessUrl("/", true)
.successHandler(new LoginSuccessHandler())
.and()
.sessionManagement()
.sessionAuthenticationStrategy(sessionAuthenticationStrategy).maximumSessions(1).maxSessionsPreventsLogin(true)
.and().and()
.csrf().disable();
return httpSecurity;

代码有效,它阻止我在同一个用户下登录两次,但是当我在 Controller 类中获取 SessionRegistry 时,它总是空的。

最佳答案

看起来好像 spring 自己创建了一个不同的 SessionRegistryImpl。

怎么样

httpSecurity
.sessionManagement()
.maximumSessions(1)
.sessionRegistry(getSessionRegistry());

遗漏了 sessionAuthenticationStrategy 东西?!

关于java - 仅限 Spring Security SessionRegistry java 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828192/

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