gpt4 book ai didi

java - 如何让我的 ContainerRequestFilter 在 @ServerEndpoint onOpen 上调用?

转载 作者:行者123 更新时间:2023-12-02 12:54:06 26 4
gpt4 key购买 nike

我有一个网络套接字@ServerEndpoint,它有一个我的过滤器监听的注释。但我的过滤器从未被调用(我的过滤器在普通 JAX-RS 资源上调用)

如何让我的过滤器被 Web 套接字端点调用?

@ServerEndpoint("/push/register")
public class WebSocketListener
{
@OnOpen
@MyFilter
public void open(Session session)
{
...
}
}

过滤器:

@MyFilter
@Provider
@Priority( Priorities.AUTHENTICATION )
public class AuthenticationFilter implements ContainerRequestFilter
{
@Context
private HttpServletRequest request;

@Override
public void filter(ContainerRequestContext requestContext) throws IOException
{
...
}
}

最佳答案

JAX-RS 过滤器与 websocket 端点无关,名称绑定(bind)也不应该起作用。

<小时/>

您可以实现Filter使用 @ServerEndpoint 中定义的相同 URI 从 Servlet API 调用注解,然后您就可以拦截握手请求。

但是过滤器不会拦截 WebSocket 帧。

@WebFilter("/push/register")
public class AuthenticationFilter implements Filter {

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

...

chain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void destroy() {

}
}

关于java - 如何让我的 ContainerRequestFilter 在 @ServerEndpoint onOpen 上调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44503208/

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