使用 Jakarta EE 和 Glassfish 服务器同时进行 ajax 请求时禁止响应 403

问题描述 投票:0回答:1

我在 Glassfish 7.0.16 中部署了一个基于雅加达的 Web 应用程序。目前,我正在使用数据库中的用户角色实施 Jakarta Security。这工作正常,直到客户端同时执行多个ajax请求,它从2°或3°ajax请求开始响应403禁止。事实上,这种情况有时会出现 10 次左右 3 次。

我尝试将安全设置更改为 web.xml 中的

<security-role>
、Servlet 文件中的
@ServletSecurity
以及 Servlet 类中的
@inject SecurityContext

我在 Servlet 类中删除了

@ServletSecurity
并编写了一个过滤器,我在其中注入
SecurityContext
并进行了如下检查:

public class AuthorizationFilter implements Filter {

 @Inject
 SecurityContext sc;

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse res = (HttpServletResponse) response;

  if (req.isUserInRole("ROLE_A") || sc.isCallerInRole("ROLE_A")) {
   doChain(request, response);
  } else {
   // log info about Principal and session attributes
  }
 }
}

就像我上面提到的,如果客户端同时发出6个ajax请求,其中一个将响应403禁止。检查

else
片段中生成的日志,所有会话属性和主体都像另外5个ajax请求一样.

知道发生了什么?

java ajax jakarta-ee glassfish jakarta-ee-security-api
1个回答
0
投票

这看起来像是已报告的 GlassFish 已知问题。我想我找到了一个解决方案,通过这个更改:https://github.com/eclipse-ee4j/glassfish/issues/25141

留意新的 GlassFish 版本,它应该会带来修复。

© www.soinside.com 2019 - 2024. All rights reserved.