heymanandgirl
heymanandgirl
采纳率0%
2016-03-23 07:52 阅读 11.1k

java websocket报错302

WebSocket connection to 'ws://127.0.0.1:3333/buguback/websocket' failed: Error during WebSocket handshake: Unexpected response code: 302

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

11条回答 默认 最新

  • hzw2312 BUG胡汉三 2017-07-27 12:02

    我也碰到啦302的问题。不知道为什么,我在hosts文件中配置啦一个域名本地解析,
    如:127.0.0.1 www.tms.com
    然后js连接里写到:

     websocket = new WebSocket("ws://www.tms.com/sct/websocket/socketServer.do");
    

    这样,在浏览器中输入localhost访问项目,WebSocket连接就会报302!
    访问项目时,必须输入www.tms.com访问WebSocket时才会正常。我想可能是因为我使用SpringWebSocket里面有一个拦截器,父类名是

     HttpSessionHandshakeInterceptor
    

    这个拦截器,专门拦截请求,将WebSocket请求转换为Http请求:

     public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
                Map<String, Object> attributes) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("Before Handshake");
            if (request instanceof ServletServerHttpRequest) {
                ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
                HttpSession session = servletRequest.getServletRequest().getSession(false);
                if (session != null) {
                    //使用userName区分WebSocketHandler,以便定向发送消息
                    User user = (User)session.getAttribute(Constants.USER_SESSION);
                    attributes.put(Constants.WEBSOCKET_USERNAME,user.getId());
                }
            }
            return super.beforeHandshake(request, response, wsHandler, attributes);
    
        }
    

    这样当我们访问浏览器的HTTP地址跟WebSocket地址域名不一样时,它会认为请求被转移啦,也就是302!
    反正我的是都改成localhost或者都改成www.tms.com访问就好啦!
    当然上面的分析都是个人的猜测,做不得准,希望有人能做详细的解释!

    点赞 3 评论 复制链接分享
  • u013892790 u013892790 2016-04-05 07:32

    亲 你解决没有 我也遇到了 死活进不去

    点赞 1 评论 复制链接分享
  • m0_37487032 纪淮 2017-09-18 08:19

    报302的原因是链接被重定向了,检查一下是否是后台访问机制的问题。比如,必须登录过后才能进行访问。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-23 07:55

    你的服务器看上去有问题,它怎么产生跳转了,调试下。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-23 07:55

    或者你的地址写的不对。

    点赞 评论 复制链接分享
  • heymanandgirl heymanandgirl 2016-03-23 08:05

    后端的代码:
    @ServerEndpoint("/websocket")
    public class Socket {

    private Logger logger = Logger.getLogger(this.getClass().getName());
    
    //该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。
    
        //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
    
        //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
        //与某个客户端的连接会话,需要通过它来给客户端发送数据
        private Session session;
    
        /**
         * 连接建立成功调用的方法
         * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
         */
        @OnOpen
        public void onOpen(Session session){
            this.session = session;
            System.out.println("有新连接加入!当前在线人数为");
        }
    
        /**
         * 连接关闭调用的方法
         */
        @OnClose
        public void onClose(){
    
            System.out.println("有一连接关闭!当前在线人数为");
        }
    
        /**
         * 收到客户端消息后调用的方法
         * @param message 客户端发送过来的消息
         * @param session 可选的参数
         */
        @OnMessage
        public void onMessage(String message, Session session) {
            System.out.println("来自客户端的消息:" + message);
    
        }
    
        /**
         * 发生错误时调用
         * @param session
         * @param error
         */
        @OnError
        public void onError(Session session, Throwable error){
            System.out.println("发生错误");
            error.printStackTrace();
        }
    
        /**
         * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
         * @param message
         * @throws IOException
         */
        public void sendMessage(String message) throws IOException{
            this.session.getBasicRemote().sendText(message);
            //this.session.getAsyncRemote().sendText(message);
        }
    
    点赞 评论 复制链接分享
  • baidu_36521148 baidu_36521148 2016-11-01 02:37

    你解决好了没,我也遇到了,头疼了俩天了对这个问题。。。。。。。。。。遇到了给咱说一声我的QQ2276922659

    点赞 评论 复制链接分享
  • OoFriday55 OoFriday55 2017-05-09 09:03

    亲,请问下这个问题解决么有,我也没弄晕了

    点赞 评论 复制链接分享
  • qq_37506772 喝酒的猫 2018-10-26 03:03

    这种烂尾的问题有点烦,我也碰到了,原因有很多,

    点赞 评论 复制链接分享
  • u011583344 小颗粒23 2019-07-25 10:25

    可以查看自己的服务端是否被权限拦截

    点赞 评论 复制链接分享
  • qq_45412136 qq_45412136 2020-04-14 13:32

    在链接那边加个项目名...神奇

    点赞 评论 复制链接分享

相关推荐