HandshakeInterceptor (WebSocket握手拦截器)

public interface HandshakeInterceptor {
    // 握手前
    boolean beforeHandshake(...);
    
    // 握手后
    void afterHandshake(...);
}

用途

  • WebSocket连接建立前的握手阶段拦截
  • 用于验证WebSocket连接请求
  • 可以向WebSocketSession中添加属性

示例

@Component
public class MessageWebSocketInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(...) {
        // 验证token
        String token = headers.get("token");
        // 验证通过后保存用户信息到session
        attributes.put("userId", userId);
        return true; // 允许连接
    }
}

HandlerInterceptor (HTTP请求拦截器)

public interface HandlerInterceptor {
    // 请求处理前
    boolean preHandle(...);
    
    // 请求处理后,视图渲染前
    void postHandle(...);
    
    // 完成后
    void afterCompletion(...);
}

用途

  • HTTP请求的拦截处理
  • 用于常规的Web请求拦截
  • 可以进行权限验证、日志记录等

示例

@Component
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(...) {
        // 验证token
        String token = request.getHeader("token");
        // 验证权限
        return true; // 允许请求继续
    }
}

主要区别

  1. 使用场景
  • HandshakeInterceptor:WebSocket连接建立阶段
  • HandlerInterceptor:HTTP请求处理过程
  1. 生命周期
  • HandshakeInterceptor:只在WebSocket握手时执行
  • HandlerInterceptor:每个HTTP请求都会执行
  1. 配置方式
// WebSocket配置
@Configuration
public class WebSocketConfig implements WebSocketConfigurer {
    public void registerWebSocketHandlers(...) {
        registry.addHandler(handler, "/ws")
               .addInterceptors(new MessageWebSocketInterceptor());
    }
}

// HTTP配置
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    public void addInterceptors(...) {
        registry.addInterceptor(new AuthInterceptor())
               .addPathPatterns("/**");
    }
}
  1. 功能侧重
  • HandshakeInterceptor:WebSocket连接的建立验证
  • HandlerInterceptor:HTTP请求的全生命周期处理