gpt4 book ai didi

java - Spring 应用程序上的最大 session 数,而不是应用程序上用户的最大 session 数

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:13 26 4
gpt4 key购买 nike

我正在使用 jhipster 编写一个网络应用程序。它正在使用 Spring 。我试图限制同一用户登录我的应用程序的次数,并使其在名为 ServerConfiguration.java 的文件上工作,如下所示:

 @Override
protected void configure(HttpSecurity http) throws Exception {
http
.and()
.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler)
.failureHandler(ajaxAuthenticationFailureHandler)
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll()
.
.
.
.
.and()
.sessionManagement()
.maximumSessions(Integer.parseInt(env.getProperty("spring.maxuser.sessions")))
.maxSessionsPreventsLogin(true);
}


@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}

这使得特定用户只能多次登录我的应用程序。

现在,我的问题是如何使我的应用程序仅对 x 数量的不同用户开放/访问。例如,我希望我的应用程序只能由 200 个用户访问。当用户 201 出现并想要登录时,却无法登录。

我在另一篇文章中看到spring limit max sessions ; limit max users答案,但我不知道该代码到底放在哪里。

public class MySessionAuthenticationStrategy extends ConcurrentSessionControlStrategy {
int MAX_USERS = 1000; // Whatever
SessionRegistry sr;

public MySessionAuthenticationStrategy(SessionRegistry sr) {
super(sr);
this.sr = sr;
}

@Override
public void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response) {
if (sr.getAllPrincipals().size() > MAX_USERS) {
throw new SessionAuthenticationException("Maximum number of users exceeded");
}
super.onAuthentication(authentication, request, response);
}

}

我应该创建这个新类 MySessionAuthenticationStrategy 以及如何从我的 httpConfigure 类转到这个新类 MySessionAuthenticationStrategy

非常感谢。

最佳答案

试试这个。创建一个类来扩展默认 session 注册表:

@Component
public class MySessionRegistry extends org.springframework.security.core.session.SessionRegistryImpl {
}

更新您的配置方法,如下所示。

    @Autowired
MySessionRegistry sessionRegistry;
void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginProcessingUrl("/api/authentication")
.successHandler(ajaxAuthenticationSuccessHandler)
.failureHandler(ajaxAuthenticationFailureHandler)
.usernameParameter("j_username")
.passwordParameter("j_password")
.permitAll().and()
.sessionManagement()
.maximumSessions(Integer.parseInt(env.getProperty("spring.maxuser.sessions")))
.sessionRegistry(sessionRegistry)
.maxSessionsPreventsLogin(true);
}

然后在登录/身份验证期间,尝试以下操作:

    @Autowired
MySessionRegistry sessionRegistry;

public void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response) {
if (calculateMaxSessions(sessionRegistry) > MAX_USERS) {
throw new SessionAuthenticationException("Maximum number of users exceeded");
} else {
//Authenticate
}
}

public int calculateMaxSessions(SessionRegistry sessionRegistry){
final List<Object> principals = sessionRegistry.getAllPrincipals();
if (principals != null) {
List<SessionInformation> sessions = new ArrayList<>();
for (Object principal : principals) {
sessions.addAll(sessionRegistry.getAllSessions(principal, false));
}
return sessions.size();
}
return 0;
}

我希望这有帮助。干杯!

关于java - Spring 应用程序上的最大 session 数,而不是应用程序上用户的最大 session 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36722947/

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