Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过基于令牌的身份验证(JWT)使用SpringWebSocket(sockJS+;Stomp)的最佳方法_Java_Spring_Websocket_Jwt_Sockjs - Fatal编程技术网

Java 通过基于令牌的身份验证(JWT)使用SpringWebSocket(sockJS+;Stomp)的最佳方法

Java 通过基于令牌的身份验证(JWT)使用SpringWebSocket(sockJS+;Stomp)的最佳方法,java,spring,websocket,jwt,sockjs,Java,Spring,Websocket,Jwt,Sockjs,我想在Spring boot应用程序中使用websockets(),该应用程序通过(JWT)进行基于令牌的身份验证。在服务器上有一个用于验证JWT令牌的筛选器。此令牌通过请求头发送,但客户端api不支持头。这意味着,当SockJS客户端api尝试与服务器进行websocket握手时,例如: new SockJS("http://localhost:8080/websocket") HTTP请求将被JWT授权筛选器截获,握手将失败,因为请求上没有头,因此,筛选器将拒绝请求。我在论坛上看到了一些建

我想在Spring boot应用程序中使用websockets(),该应用程序通过(JWT)进行基于令牌的身份验证。在服务器上有一个用于验证JWT令牌的筛选器。此令牌通过请求头发送,但客户端api不支持头。这意味着,当SockJS客户端api尝试与服务器进行websocket握手时,例如:

new SockJS("http://localhost:8080/websocket")
HTTP请求将被JWT授权筛选器截获,握手将失败,因为请求上没有头,因此,筛选器将拒绝请求。我在论坛上看到了一些建议的变通方法,但没有一个适合这种情况:

  • 握手侦听器:此解决方案不起作用,因为筛选器总是在侦听器之前执行
  • 在STOMP头上发送身份验证头也不起作用,因为STOMP连接自然发生在握手之后
我发现可以通过查询参数在SockJS握手URL上发送令牌,并且我必须更改身份验证过滤器以同时查找查询参数,而不仅仅是头。出于安全原因,我不太喜欢这种根据查询参数发送令牌的解决方案。是否有更好的替代方案,或者这真的是最好的方法

握手侦听器:此解决方案不起作用,因为 始终在拦截器之前执行

这是我使用与您完全相同的设置所做的

您需要将
websocket端点添加到

@Override public void configure(WebSecurity registry)

这将告诉spring security不要为套接字端点触发,从而为
jwt
设置过滤器

registry.ignoring().antMatchers("/websocket/**");