HandshakeInterceptor与HandlerInterceptor
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; // 允许请求继续
}
}
主要区别
- 使用场景
- HandshakeInterceptor:WebSocket连接建立阶段
- HandlerInterceptor:HTTP请求处理过程
- 生命周期
- HandshakeInterceptor:只在WebSocket握手时执行
- HandlerInterceptor:每个HTTP请求都会执行
- 配置方式
// 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("/**");
}
}
- 功能侧重
- HandshakeInterceptor:WebSocket连接的建立验证
- HandlerInterceptor:HTTP请求的全生命周期处理
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Roozen
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果