44 lines
1.6 KiB
Java
44 lines
1.6 KiB
Java
package com.filesystem.config;
|
|
|
|
import com.filesystem.security.JwtUtil;
|
|
import jakarta.annotation.Resource;
|
|
import org.springframework.http.server.ServerHttpRequest;
|
|
import org.springframework.http.server.ServerHttpResponse;
|
|
import org.springframework.http.server.ServletServerHttpRequest;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.socket.WebSocketHandler;
|
|
import org.springframework.web.socket.server.HandshakeInterceptor;
|
|
|
|
import java.util.Map;
|
|
|
|
@Component
|
|
public class WebSocketAuthInterceptor implements HandshakeInterceptor {
|
|
|
|
@Resource
|
|
private JwtUtil jwtUtil;
|
|
|
|
@Override
|
|
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
|
|
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
|
|
if (request instanceof ServletServerHttpRequest servletRequest) {
|
|
String token = servletRequest.getServletRequest().getParameter("token");
|
|
if (token != null) {
|
|
try {
|
|
Long userId = jwtUtil.getUserIdFromToken(token);
|
|
if (userId != null) {
|
|
attributes.put("userId", userId.toString());
|
|
return true;
|
|
}
|
|
} catch (Exception e) {
|
|
// JWT 解析失败
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
|
|
WebSocketHandler wsHandler, Exception exception) {
|
|
}
|
|
} |