YeautyYE / netty-websocket-spring-boot-starter

:rocket: lightweight high-performance WebSocket framework ( 轻量级、高性能的WebSocket框架)
Apache License 2.0
1.83k stars 540 forks source link

如何获得HttpSession? #69

Open koliday opened 5 years ago

koliday commented 5 years ago

以前使用spring-boot-starter-websocket是有办法获取的,现在要如何获取呢?

YeautyYE commented 5 years ago

以前使用spring-boot-starter-websocket是有办法获取的,现在要如何获取呢?

不是同一个东西,没办法获取。(一个基于Servlet容器,一个基于Netty。并且也不打算和Servlet容器相关的包集成在一起) 如果你一定要的话,可以自己new一个,然后把相关参数set进去。并将两个session互相引用一下。

koliday commented 5 years ago

以前使用spring-boot-starter-websocket是有办法获取的,现在要如何获取呢?

不是同一个东西,没办法获取。(一个基于Servlet容器,一个基于Netty。并且也不打算和Servlet容器相关的包集成在一起) 如果你一定要的话,可以自己new一个,然后把相关参数set进去。并将两个session互相引用一下。

那我前端传参,然后用ParameterMap获取用户信息也可以的对吧

YeautyYE commented 5 years ago

那我前端传参,然后用ParameterMap获取用户信息也可以的对吧

是的,前端将参数放在query里面。

koliday commented 5 years ago

那我前端传参,然后用ParameterMap获取用户信息也可以的对吧

是的,前端将参数放在query里面。

好的谢谢

LL3706 commented 4 years ago

前端怎么把参数放到query 里面,query 是个map吗

YeautyYE commented 4 years ago

前端怎么把参数放到query 里面,query 是个map吗

如果是0.9.0版 可以在OnOpen事件的参数里面加上 @RequestParam MultiValueMap reqMap 如果只需要某个query的时候,可以用 @RequestParam String req

zeroheroo commented 4 years ago

https://blog.csdn.net/littleDingDang/article/details/88221953, 你好,我根据这个博客的步骤想实现在onopen的时候获取用户session,也就是httpsession,但是需要在ServerEndpoint增加属性configurator,在onopen方法增加EndpointConfig config参数,我该怎么修改下你的源码呢? 我用的是0.9.0版本

YeautyYE commented 4 years ago

https://blog.csdn.net/littleDingDang/article/details/88221953, 你好,我根据这个博客的步骤想实现在onopen的时候获取用户session,也就是httpsession,但是需要在ServerEndpoint增加属性configurator,在onopen方法增加EndpointConfig config参数,我该怎么修改下你的源码呢? 我用的是0.9.0版本

这个文章是基于Servlet容器和spring实现的websocket来配置的。 本框架不兼容Servlet的httpsession,如果要改的话,可以在onopen的时候自己创建httpsession,并将相关参数set进去

LL3706 commented 4 years ago

前端怎么把参数放到query 里面,query 是个map吗

如果是0.9.0版 可以在OnOpen事件的参数里面加上 @RequestParam MultiValueMap reqMap 如果只需要某个query的时候,可以用 @RequestParam String req

前端怎么把参数放到query 里面,query 是个map吗

前端怎么把参数放到query 里面,query 是个map吗

如果是0.9.0版 可以在OnOpen事件的参数里面加上 @RequestParam MultiValueMap reqMap 如果只需要某个query的时候,可以用 @RequestParam String req

是0.9.0最新版本,前段url 需要怎么传map参数,eg:ws://127.0.0.1:8086/ws?reqMap={name=jack,age=23}&req=tom 这样传map参数吗;后端代码我知道可以加注解@RequestParam MultiValueMap reqMap;

YeautyYE commented 4 years ago

是0.9.0最新版本,前段url 需要怎么传map参数,eg:ws://127.0.0.1:8086/ws?reqMap={name=jack,age=23}&req=tom 这样传map参数吗;后端代码我知道可以加注解@RequestParam MultiValueMap reqMap;

ws://127.0.0.1:8086/ws?a=b&c=d 以下两种方式都可以

  1. 在后端参数中添加 @RequestParam MultiValueMap map , 这个map中就有两个键值对
  2. 在后端参数中添加 @RequestParam String a,@RequestParam String c , 这里的a 、c 就能拿到query中的a、c的值b、d
LL3706 commented 4 years ago

前端怎么把参数放到query 里面,query 是个map吗

如果是0.9.0版 可以在OnOpen事件的参数里面加上 @RequestParam MultiValueMap reqMap 如果只需要某个query的时候,可以用 @RequestParam String req

前端怎么把参数放到query 里面,query 是个map吗

前端怎么把参数放到query 里面,query 是个map吗

如果是0.9.0版 可以在OnOpen事件的参数里面加上 @RequestParam MultiValueMap reqMap 如果只需要某个query的时候,可以用 @RequestParam String req

是0.9.0最新版本,前段url 需要怎么传map参数,eg:ws://127.0.0.1:8086/ws?reqMap={name=jack,age=23}&req=tom 这样传map参数吗;后端代码我知道可以加注解@RequestParam MultiValueMap reqMap; 第一个问题: 1.前端传参是:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 后端只能接受到req参数的值,不能接受到reqMap的值,第二种情况就按map 接值,后端map也是null. @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam String req, @RequestParam MultiValueMap reqMap, @PathVariable String userId, @PathVariable Map pathMap){ session.setAttribute("userId", userId); if (!sessionMap.containsKey(userId)) { sessionMap.put(userId,session); } log.info("new connection,在线人数:{}", sessionMap.size()); } 第二个问题: 2.后端能不能既接受map参数(即reqMap),又接受单个参数(即req),后端用这2个参数接@RequestParam MultiValueMap reqMap,@RequestParam String req. 问题是前端该怎么传参ws://127.0.0.1:8086/ws?reqMap={name=jack,age=23}&req=tom

YeautyYE commented 4 years ago

reqMap

这样吧,你去掉其他参数,只保留@RequestParam MultiValueMap reqMap,然后打印下里面的东西你就明白了。

LL3706 commented 4 years ago

reqMap

这样吧,你去掉其他参数,只保留@RequestParam MultiValueMap reqMap,然后打印下里面的东西你就明白了。

前端url:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 我只保留一个map,其他的注解都去掉,打印的还是null @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam MultiValueMap map){ log.info("new connection,map:{}", ,map); }

YeautyYE commented 4 years ago

前端url:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 我只保留一个map,其他的注解都去掉,打印的还是null @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam MultiValueMap map){ log.info("new connection,map:{}", ,map); }

@RequestParam 用的是哪个包的 ?

LL3706 commented 4 years ago

前端url:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 我只保留一个map,其他的注解都去掉,打印的还是null @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam MultiValueMap map){ log.info("new connection,map:{}", ,map); }

@RequestParam 用的是哪个包的 ?

用的是import org.yeauty.annotation.*; 这个包下面的,用成spring 的那个包程序会起来的,我试过的

YeautyYE commented 4 years ago

前端url:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 我只保留一个map,其他的注解都去掉,打印的还是null @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam MultiValueMap map){ log.info("new connection,map:{}", ,map); }

@RequestParam 用的是哪个包的 ?

用的是import org.yeauty.annotation.*; 这个包下面的,用成spring 的那个包程序会起来的,我试过的

嗯,我知道原因了,这里有个bug。我修复下,明天能用

LL3706 commented 4 years ago

前端url:ws://127.0.0.1:8086/ws?a=b&c=d&req=tom 我只保留一个map,其他的注解都去掉,打印的还是null @OnOpen public void onOpen(Session session, HttpHeaders headers, @RequestParam MultiValueMap map){ log.info("new connection,map:{}", ,map); }

@RequestParam 用的是哪个包的 ?

用的是import org.yeauty.annotation.*; 这个包下面的,用成spring 的那个包程序会起来的,我试过的

嗯,我知道原因了,这里有个bug。我修复下,明天能用

好的,大佬辛苦了

YeautyYE commented 4 years ago

好的,大佬辛苦了 感谢你的支持和提醒