websocket没有自己的拦截器,可以使用filter过滤器进行拦截;主要方法是通过filter筛选出websocket的连接,然后进行拦截,根据业务处理该连接是否放行;代码如下:
public class Auth implements Filter{
private static final String[] FILTER_LIST = {"/websocket/"}; //websocket连接地址,数组类型
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
String servletPath = httpServletRequest.getServletPath();
//上面定义的websocket连接地址和请求中获取到的地址进行比对,比对上后进如逻辑代码块
if (Arrays.stream(FILTER_LIST).anyMatch(servletPath::startsWith)) {
//业务逻辑处理,
filterChain.doFilter(servletRequest, servletResponse) //放行方法
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}