java websocket报错302

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

11个回答

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

或者你的地址写的不对。

heymanandgirl
heymanandgirl http://127.0.0.13333/buguback项目是可以访问的。然后我也把所有拦截器去掉了,访问了还是不行
4 年多之前 回复

后端的代码:
@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);
    }

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

OoFriday55
OoFriday55 回复wobushifeiren: 亲,请问下这个问题解决么有,我也没弄晕了
3 年多之前 回复
wobushifeiren
wobushifeiren 大哥,解决了没?我也遇到这个问题了~
4 年多之前 回复

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

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

我也碰到啦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访问就好啦!
当然上面的分析都是个人的猜测,做不得准,希望有人能做详细的解释!

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

weixin_43824046
Kwanghuee 确实,权限拦截了
11 个月之前 回复
weixin_36931308
weixin_36931308 老铁,厉害了
一年多之前 回复

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

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

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐