java - 限制 Spring Boot 应用程序中的 session 总量

标签 java spring spring-boot load session-management

在我们的 Spring Boot Web 服务器中,我知道如何限制每个用户的 session (httpSecurity.sessionManagement().maximumSessions()),但我想限制 session 总量,以避免服务器负载。

如何做到这一点?

最佳答案

如果“用户总数”是系统中“负载”的有意义的代理(请参阅@JBNizet 的评论),例如如果大多数请求在资源占用方面是相同的,那么您可以定义自己的 SessionAuthenticationStrategy 实现。这是一个简单的例子:

private class AllUsersConcurrentSessionControlAuthenticationStrategy extends ConcurrentSessionControlAuthenticationStrategy {

    // probably inject this from application configuration
    private final int maxUsers;
    private final SessionRegistry sessionRegistry;

    public AllUsersConcurrentSessionControlAuthenticationStrategy(int maxUsers, SessionRegistry sessionRegistry) {
        super(sessionRegistry);
        this.maxUsers = maxUsers;
        this.sessionRegistry = sessionRegistry;
    }

    @Override
    public void onAuthentication(Authentication authentication, HttpServletRequest request,
                                 HttpServletResponse response) {
        if (sessionRegistry.getAllPrincipals().size() > maxUsers) {
            throw new SessionAuthenticationException("...");
        }
        super.onAuthentication(authentication, request, response);
    }
}

您可以像这样注册:

http.sessionManagement().sessionAuthenticationStrategy(new AllUsersConcurrentSessionControlAuthenticationStrategy(maxUsers, sessionRegistry));

但是,如果“用户总数”不是有意义的“负载”代理,那么您也许应该考虑以非阻塞方式实现您的服务,每个端点将其请求传递给线程池和请求到线程池的分配策略可以考虑请求的“重度”。轻量级请求可以由大型线程池处理,重型请求可以由较小线程池处理。

关于java - 限制 Spring Boot 应用程序中的 session 总量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940813/

相关文章:

java - 如何将用户函数添加到从 JasperCompilerManager 编译的 jrxml 中

java - 如何强制Java进程在热点崩溃时退出

java - Spring Boot,在 REST Controller 中上传任意数量的文件

java - 当我请求休息服务时,Jquery 不起作用(Spring Boot)

spring - 使用方法在运行时动态创建 Spring bean

java - Maven - 在安装时重命名第三方 jar

java - 链表滚动

spring - 如何防止 Spring JmsTemplate 单元测试在读取 ActiveMQ 队列时阻塞?

java - NIO 在单元测试中从 src/test/resources 加载文件

spring-boot - 如何让 JavaMailSender 不会因为错误的邮件密码而导致应用程序上下文加载失败?