我有一个Web套接字@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
{
...
}
}
答案 0 :(得分:1)
JAX-RS过滤器与websocket端点无关,名称绑定也不起作用。
您可以使用Filter
注释中定义的相同URI从Servlet API实现@ServerEndpoint
,然后您就可以拦截握手请求。
但是过滤器不会拦截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() {
}
}