本文将为您提供关于javax.websocket.HandshakeResponse的实例源码的详细介绍,我们还将为您解释javawebsocketclient的相关知识,同时,我们还将为您提供关于c
本文将为您提供关于javax.websocket.HandshakeResponse的实例源码的详细介绍,我们还将为您解释java websocketclient的相关知识,同时,我们还将为您提供关于cpw.mods.fml.common.network.handshake.FMLHandshakeMessage的实例源码、Error during WebSocket handshake 403、Error during WebSocket handshake: Unexpected response code: 200、Error during WebSocket handshake: Unexpected response code: 404的实用信息。
本文目录一览:- javax.websocket.HandshakeResponse的实例源码(java websocketclient)
- cpw.mods.fml.common.network.handshake.FMLHandshakeMessage的实例源码
- Error during WebSocket handshake 403
- Error during WebSocket handshake: Unexpected response code: 200
- Error during WebSocket handshake: Unexpected response code: 404
javax.websocket.HandshakeResponse的实例源码(java websocketclient)
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeRequest request,HandshakeResponse response) { HttpSession httpSession = (HttpSession) request.getHttpSession(); super.modifyHandshake(config,request,response); if (httpSession == null) { LOGGER.info("httpSession == null after modifyHandshake"); httpSession = (HttpSession) request.getHttpSession(); } if (httpSession == null) { LOGGER.info("httpSession == null"); return; } config.getUserProperties().put("httpSession",httpSession); httpSession = (HttpSession) request.getHttpSession(); LOGGER.info("modifyHandshake " + httpSession.getId()); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { super.modifyHandshake(sec,response); if ( token == null || token.isEmpty() ) { Log.log(Level.FInesT,this,"No token set for room,skipping validation"); } else { Log.log(Level.FInesT,"Validating WS handshake"); SignedRequestHmac wsHmac = new SignedRequestHmac("",token,"",request.getRequestURI().getRawPath()); try { wsHmac.checkHeaders(new SignedRequestMap.MLS_StringMap(request.getHeaders())) .verifyFullSignature() .wsResignRequest(new SignedRequestMap.MLS_StringMap(response.getHeaders())); Log.log(Level.INFO,"validated and resigned",wsHmac); } catch(Exception e) { Log.log(Level.WARNING,"Failed to validate HMAC,unable to establish connection",e); response.getHeaders().replace(HandshakeResponse.SEC_WEBSOCKET_ACCEPT,Collections.emptyList()); } } }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { Map<String,List<String>> headers = request.getHeaders(); if (headers != null && headers.containsKey(WatcherSecurityKey.HTTP_HEADER)) { List<String> header = headers.get(WatcherSecurityKey.HTTP_HEADER); if (header.size() > 0) { config.getUserProperties().put(WatcherSecurityKey.HTTP_HEADER,header. get(0)); } } HttpSession httpSession = (HttpSession) request.getHttpSession(); String user = request.getUserPrincipal().getName(); config.getUserProperties().put("httpSession",httpSession); config.getUserProperties().put("user",user); logger.log(Level.INFO,"Hand shake for upgrade to websocket by: {0}",user); }
/** * Intercept the handshake operation so that we can take a hold of the * ServletContext instance to be able to retrieve attributes stored to it * such as the database object and other similar class instances * <p/> * @param config * @param request * @param response */ @Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpSession httpSession = (HttpSession) request.getHttpSession(); ServletContext context = (ServletContext) httpSession.getServletContext(); config.getUserProperties().put("httpSession",request.getUserPrincipal().getName()); /* * store these attributes to servletContext so that they are available to * every created user socket session */ config.getUserProperties().put("protocol",context.getAttribute("protocol")); }
@Override public void afterResponse(HandshakeResponse hr) { super.afterResponse(hr); if( wsHmac != null ) { try { Log.log(Level.FInesT,drain,"Validating HMAC supplied for WS"); wsHmac.wsverifySignature(new SignedRequestMap.MLS_StringMap(hr.getHeaders())); Log.log(Level.FInesT,"Validating HMAC result is {0}",responseValid); } catch (Exception e) { Log.log(Level.FInesT,e); } } else { Log.log(Level.INFO,"No token supplied for room,skipping WS handshake validation"); responseValid = true; } }
@Override public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> set) { return new HashSet<ServerEndpointConfig>() {{ add(ServerEndpointConfig.Builder .create(MyEndpoint.class,"/websocket") .configurator(new ServerEndpointConfig.Configurator() { @Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { HttpSession session = (HttpSession)request.getHttpSession(); System.out.println("HttpSession id: " + session.getId()); System.out.println("HttpSession creation time: " + session.getCreationTime()); super.modifyHandshake(sec,response); } }) .build()); }}; }
public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpServletRequest _request = (HttpServletRequest) GenericReflection.NoThrow.getValue(_HandshakeRequest,request); Request _requestFaced = (Request) GenericReflection.NoThrow.getValue(Core.requestField,_request); MimeHeaders mime = new MimeHeaders(); Enumeration<String> enuns = _requestFaced.getHeaderNames(); while(enuns.hasMoreElements()){ String param = (String) enuns.nextElement(); mime.addValue(param).setString(_requestFaced.getHeader(param)); } Map<String,Object> properties = config.getUserProperties(); properties.put("httpRequest",_request); properties.put("httpResponse",_request.getAttribute("httpResponse")); properties.put("httpSession",_request.getSession()); properties.put("context",_requestFaced.getContext()); properties.put("headers",mime); properties.put("remoteHost",_request.getRemoteHost()); properties.put("localPort",_request.getLocalPort()); properties.put("remoteAddr",_request.getRemoteAddr()); }
@Override public void afterResponse(HandshakeResponse hr) { Map<String,List<String>> headers = hr.getHeaders(); if (headers.containsKey(SEC_WEB_SOCKET_PROTOCOL_STRING.toLowerCase(Locale.ENGLISH))) { receivedSubProtocol = headers.get(SEC_WEB_SOCKET_PROTOCOL_STRING.toLowerCase(Locale.ENGLISH)).get(0); } else { receivedSubProtocol = null; } receiveLatch.countDown(); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { HttpSession httpSession = (HttpSession) request.getHttpSession(); sec.getUserProperties().put(HttpSession.class.getName(),httpSession); }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpSession httpSession = (HttpSession) request.getHttpSession(); if (null != httpSession) { config.getUserProperties().put(HttpSession.class.getName(),httpSession); } }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { System.out.println("modifyHandshake() Current thread " + Thread.currentThread().getName()); String user = request.getParameterMap().get("user").get(0); sec.getUserProperties().put(user,request.getHttpSession()); System.out.println("modifyHandshake() User " + user + " with http session ID " + ((HttpSession) request.getHttpSession()).getId()); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { final HttpSession httpSession = (HttpSession) request.getHttpSession(); if (request.getUserPrincipal() == null) { return; } final SecurityContext securityCtx = new WebSocketSecurityContext(request); sec.getUserProperties().put(key(httpSession.getId()),securityCtx); }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { super.modifyHandshake(config,response); // Store tunnel request and tunnel request service for retrieval // upon WebSocket open Map<String,Object> userProperties = config.getUserProperties(); userProperties.clear(); userProperties.put(TUNNEL_REQUEST_PROPERTY,new WebSocketTunnelRequest(request)); userProperties.put(TUNNEL_REQUEST_SERVICE_PROPERTY,tunnelRequestServiceProvider.get()); }
@Override public void modifyHandshake(final ServerEndpointConfig config,final HandshakeRequest request,final HandshakeResponse response) { final HttpSession httpSession = (HttpSession) request.getHttpSession(); config.getUserProperties().put(HttpSession.class.getName(),httpSession); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { final Principal principal = request.getUserPrincipal(); final Subject subject = SecurityActions.getSubject(); final Object credential = SecurityActions.getCredential(); sec.getUserProperties().put(WebsocketSecurityInterceptor.SESSION_PRINCIPAL,principal); sec.getUserProperties().put(WebsocketSecurityInterceptor.SESSION_SUBJECT,subject); sec.getUserProperties().put(WebsocketSecurityInterceptor.SESSION_CREDENTIAL,credential); }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpSession session = (HttpSession) request.getHttpSession(); if (null != session) { config.getUserProperties().put("demo",1L); } }
private Configurator createConfigurator() { return new Configurator() { @Override public void modifyHandshake( ServerEndpointConfig sec,HandshakeResponse response) { super.modifyHandshake(sec,response); final HttpSession httpSession = (HttpSession) request.getHttpSession(); if (httpSession != null) { sec.getUserProperties().put(HTTP_SESSION_ATTRIBUTE,httpSession); } sec.getUserProperties().put(Security_CONTEXT,createSecurityContext(request)); sec.getUserProperties().put(ENVIRONMENT_CONTEXT,EnvironmentContext.getCurrent()); } }; }
private ServerEndpointConfig.Configurator configuratorFor(final String prefix,final boolean isRaw) { return new ServerEndpointConfig.Configurator() { @Override public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException { try { return endpointClass.getConstructor(SockJsServer.class,String.class,String.class) .newInstance(sockJsServer,context.getcontextpath(),prefix); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { if (isRaw) { // We have no reliable key (like session id) to save // headers with for raw websocket requests return; } String path = request.getRequestURI().getPath(); Matcher matcher = SESSION_PATTERN.matcher(path); if (matcher.matches()) { String sessionId = matcher.group(1); saveHeaders(sessionId,request.getHeaders()); } } }; }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpSession httpSession = (HttpSession) request.getHttpSession(); config.getUserProperties() .put(HttpSession.class.getName(),httpSession); }
private ServerEndpointConfig.Configurator configuratorFor(final String prefix,getServletContext().getcontextpath(),HandshakeResponse response) { if (isRaw) { // We have no reliable key (like session id) to save // headers with for raw websocket requests return; } String path = request.getRequestURI().getPath(); Matcher matcher = SESSION_PATTERN.matcher(path); if (matcher.matches()) { String sessionId = matcher.group(1); saveHeaders(sessionId,request.getHeaders()); } } }; }
public static final RequestAgent getWsRequestAgent(HandshakeRequest request,HandshakeResponse response) { // this is an abstraction point. this class can be loaded from configuration. if (request instanceof HttpServletRequest) { return new RequestAgent.HTTP((HttpServletRequest) request,(HttpServletResponse) response); } else { return null; } }
/** * Test of modifyHandshake method,of class OcelotRequestConfigurator. */ @Test public void testModifyHandshake() { System.out.println("testModifyHandshake"); ServerEndpointConfig sec = mock(ServerEndpointConfig.class); Map<String,Object> userProperties = new HashMap<>(); HandshakeRequest request = mock(HandshakeRequest.class); HandshakeResponse response = mock(HandshakeResponse.class); when(sec.getUserProperties()).thenReturn(userProperties); instance.modifyHandshake(sec,response); assertthat(userProperties.get(Constants.HANDSHAKEREQUEST)).isEqualTo(request); }
@Override public void afterResponse(HandshakeResponse response) { System.out.println("afterResponse:"); for (String h : response.getHeaders().keySet()) { for (String k : response.getHeaders().get(h)) { System.out.println("Header: " + h + "," + k); } } }
@Override public void modifyHandshake(ServerEndpointConfig sec,response); System.out.println("Handshake Request:"); System.out.println("Serving at: " + request.getRequestURI()); System.out.println("Handshake Response:"); for (String h : response.getHeaders().keySet()) { for (String k : response.getHeaders().get(h)) { System.out.println("Header: " + h + "," + k); } } }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { HttpSession httpSession = (HttpSession)request.getHttpSession(); config.getUserProperties().put(HttpSession.class.getName(),httpSession); }
@Override public void modifyHandshake(final ServerEndpointConfig config,final HandshakeResponse response) { final HttpSession httpSession = (HttpSession) request.getHttpSession(); config.getUserProperties().put(HTTP_SESSION_KEY,httpSession); }
@Override public void afterResponse( HandshakeResponse hr ) { try { if ( loginContext != null ) { loginContext.logout(); } } catch ( LoginException e ) { e.printstacktrace(); //work is done just ignore } }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { String url = endpointConfig.getUrl(); if (endpointConfig.isDynamicAddressing()) { // url = request.getRequestURI().substring(request.getcontextpath().length()); } ClientChannel clientChannel = endpointConfig.getClientChannelFor(url); String username = null; try { username = clientChannel.authenticate(endpointConfig.getAuthenticationProvider(),request); } catch (AuthenticationException e) { LOG.warn("Unauthorized access for " + request,e); throw new SecurityException("Unauthorized access for " + request); } client = endpointConfig.getClientBuilder(clientChannel).get(request) .username(username) .url(url) .protocol(selectedProtocol,endpointConfig.getProtocolRepository()) .build(); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { delegate.modifyHandshake(sec,response); }
@Override public void modifyHandshake(ServerEndpointConfig config,HandshakeResponse response) { config.getUserProperties().put(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL,request.getHeaders().get(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL)); }
public HttpResponse(int status,HandshakeResponse handshakeResponse) { this.status = status; this.handshakeResponse = handshakeResponse; }
public HandshakeResponse getHandshakeResponse() { return handshakeResponse; }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { // NO-OP }
public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { fetchContainerDefaultConfigurator().modifyHandshake(sec,response); }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { }
public HttpResponse(int status,HandshakeResponse handshakeResponse) { this.status = status; this.handshakeResponse = handshakeResponse; }
public HandshakeResponse getHandshakeResponse() { return handshakeResponse; }
@Override public void modifyHandshake(ServerEndpointConfig sec,HandshakeResponse response) { // NO-OP }
public void modifyHandshake(ServerEndpointConfig sec,response); }
cpw.mods.fml.common.network.handshake.FMLHandshakeMessage的实例源码
public static String checkModList(FMLHandshakeMessage.ModList modListPacket,Side side) { Map<String,String> modList = modListPacket.modList(); return checkModList(modList,side); }
public static String checkModList(FMLHandshakeMessage.ModList modListPacket,side); }
public static String checkModList(FMLHandshakeMessage.ModList modListPacket,side); }
Error during WebSocket handshake 403
握手时出错 403
浏览器控制台错误提示
Error during WebSocket handshake: Unexpected response code: 403
配置示例
- websocket 注册
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(socketHandler, "/test").addInterceptors(new SystemInfoSocketHandshakeInterceptor());
registry.addHandler(socketHandler, "/sockjs/test").addInterceptors(new SystemInfoSocketHandshakeInterceptor())
.withSockJS();
}
- 握手拦截器
@Configuration
public class SystemInfoSocketHandshakeInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object
> attributes) {
log.info("socket beforeHandshake..");
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
// 业务处理
}
return true;
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
log.info("socket beforeHandshake..");
}
}
- 客户端连接
var wsServer = "ws://127.0.0.1:8080";
var webSocket;
if (''WebSocket'' in window || ''MozWebSocket'' in window) {
webSocket = new WebSocket(wsServer + "/test");
} else {
webSocket = new SockJS(wsServer + "/sockjs/test");
}
webSocket.onerror = function (event) {
console.log("websockt连接错误")
};
分析
- 连接失败
- 访问拦截
- nginx 代理
- 跨域
解决
连接问题
如果是连接上面的问题,一般看一下配置是否正确
注意版本问题
访问拦截
在拦截器中,解除拦截
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
};
}
nginx 代理
在 nginx 中配置 proxy_set_header Upgrade $http_upgrade
proxy_set_header Connection "upgrade"
proxy_set_header Host $host
三个配置
完整配置如下:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
跨域
添加 setAllowedOrigins("*")
解决跨域问题
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(socketHandler, "/test")
.addInterceptors(new SystemInfoSocketHandshakeInterceptor())
.setAllowedOrigins("*");
registry.addHandler(socketHandler, "/sockjs/test")
.addInterceptors(new SystemInfoSocketHandshakeInterceptor())
.setAllowedOrigins("*")
.withSockJS();
}
资料相关
- Spring WebSockets
收录时间: 2021/02/03
Error during WebSocket handshake: Unexpected response code: 200
Error during WebSocket handshake: Unexpected response code: 200
这是服务器配置:
@Configuration
@EnableWebMvc
@EnableWebSocket
@RequestMapping("/gpsConfig")
public class GpsWebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@RequestMapping("/gpsTrigger")
public void messageTrigger(){
}
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(gpsWebSocketHandler(), "/gpsweb/warn").setAllowedOrigins("*").addInterceptors(gpsInterceptor());
}
@Bean
public GpsWarnWebSocketHandler gpsWebSocketHandler() {
return new GpsWarnWebSocketHandler();
}
@Bean
public GpsHandshakeInterceptor gpsInterceptor() {
return new GpsHandshakeInterceptor();
}
}
var webSocket =
new WebSocket(''ws://localhost:8080/hx-gps-platform/gpsweb/warn'');
Error during WebSocket handshake: Unexpected response code: 404
直接访问IP和端口是没有问题,用了Nginx之后产生了问题。
经查找,需要在Nginx中设置(红色部分)。
server { listen 80; server_name jsjnks.test.com; charset utf-8; location / { proxy_pass http://jsjnks; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /public { alias "D:/app/Nginx/html/public"; } location /jsjnks-static { alias "D:/app/Nginx/html/jsjnks-static"; } }
我们今天的关于javax.websocket.HandshakeResponse的实例源码和java websocketclient的分享就到这里,谢谢您的阅读,如果想了解更多关于cpw.mods.fml.common.network.handshake.FMLHandshakeMessage的实例源码、Error during WebSocket handshake 403、Error during WebSocket handshake: Unexpected response code: 200、Error during WebSocket handshake: Unexpected response code: 404的相关信息,可以在本站进行搜索。
本文标签: