java中实现兼容ie6 7 8 9的spring4+websocket

 更新时间:2024年09月02日 16:50:19   投稿:hebedich  
这篇文章主要介绍了java中实现兼容ie6 7 8 9的spring4+websocket程序代码,十分的简单实用,有需要的小伙伴可以参考下。

效果

不支持websocket的浏览器,用flash模拟websocket.当然,也可以用flash socket直接与服务端socket连接。

事实上,websocket协议比较简单,用actionscript模拟也比较简单,这个在本人的另外一篇文章让ie6 7 8 9支持html5 websocket简单说了下。

另外,spring为sockjs 提供api,只需简单配置下,就可以兼容低版本浏览器,原理是用js模拟websocket object。具体的本人还没有去看。

几点说明:

1.使用spring对websocket的封装既可以单独使用,也可以和spring mvc一起使用。需要注意的是,单独使用时,仍然要在web.xml中配置spring的dispatcher,仍然要打开server.

  <servlet>
    <servlet-name>websocket</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value> 
        /WEB-INF/applicationContext.xml 
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>websocket</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

2.单独使用时,若refer跨域,需要在spring中设置白名单

  <websocket:handlers allowed-origins="*">
       ........
  </websocket:handlers>

3.由于用到了flash,所以需要开启843端口,并在flash请求policy文件时,返回policy文件。例子中用的是netty4.

4.需要对握手进行拦截,监听。因为在后面的websocket处理类中,无法从WebSocketSession获得session.另外,这里获得session要保存到arrtibutes中,在websocket处理类中,WebSocketSession调用getAttributes()方法就可以获得arrtibutes了。

public class ChatIntercepter extends HttpSessionHandshakeInterceptor{
  
  @Override
  public boolean beforeHandshake(ServerHttpRequest request,
      ServerHttpResponse response, WebSocketHandler wsHandler,
      Map<String, Object> attributes) throws Exception {
    if (request instanceof ServletServerHttpRequest) {
      ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
      HttpSession session = servletRequest.getServletRequest().getSession(false);
      if (session != null) {
        String userName = (String) session.getAttribute("user");
        attributes.put("user",userName);
      }
    }
    System.out.println("Before Handshake"+request.getHeaders());
//    return super.beforeHandshake(request, response, wsHandler, attributes);
    return true;
  }
   ..............

}

5.在web-socket-js 中,flash模拟的websocket头信息中会包含cookie,不过是人工通过脚本添加的。所以要避免需要的cookie,如session cookie是httponly.这就需要设置容器。

如果当前是在eclipse中开发

可以看到在context标签上添加useHttpOnly='false'就可以了,而context标签是eclipse部署时自动添加的。

如果已经打包了,就到tomcat目录/conf/server.xml,在最后的</Host>前面添加

复制代码 代码如下:

<Context docBase="websocket" path="/websocket" reloadable="true" useHttpOnly='false'/>

意思所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • java代码实现MD5加密及验证过程详解

    java代码实现MD5加密及验证过程详解

    这篇文章主要介绍了java代码实现MD5加密及验证过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • JAVA--HashMap热门面试题

    JAVA--HashMap热门面试题

    这篇文章主要介绍了JAVA关于HashMap容易被提问的面试题,文中题目提问频率高,相信对你的面试有一定帮助,想要入职JAVA的朋友可以了解下
    2020-06-06
  • Spring Boot 如何整合连接池

    Spring Boot 如何整合连接池

    这篇文章主要介绍了Spring Boot 如何整合连接池,帮助大家更好的理解和学习spring boot框架,感兴趣的朋友可以了解下
    2020-11-11
  • Spring Security获取用户认证信息的实现流程

    Spring Security获取用户认证信息的实现流程

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,为应用系统提供声明式的安全访问控制功能
    2022-12-12
  • Java中equals和hashcode用法

    Java中equals和hashcode用法

    `equals`和`hashCode`方法在Java中密切相关,必须保持一致性,如果两个对象通过`equals`方法相等,它们的`hashCode`也必须相同,这对于基于哈希的数据结构至关重要,因为这些结构依赖哈希值进行快速查找和存储,为了减少哈希冲突
    2025-01-01
  • Spring boot部署发布到linux的操作方法

    Spring boot部署发布到linux的操作方法

    这篇文章主要介绍了Spring boot部署发布到linux的操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • SpringBoot3集成和使用Jasypt的代码详解

    SpringBoot3集成和使用Jasypt的代码详解

    随着信息安全的日益受到重视,加密敏感数据在应用程序中变得越来越重要,Jasypt作为一个简化Java应用程序中数据加密的工具,为开发者提供了一种便捷而灵活的加密解决方案,本文将深入解析Jasypt的工作原理,需要的朋友可以参考下
    2024-01-01
  • Spring基础篇之初识DI和AOP

    Spring基础篇之初识DI和AOP

    这篇文章主要为大家详细介绍了Spring基础篇之初识DI和AOP,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 详解SpringBoot如何统一处理返回的信息

    详解SpringBoot如何统一处理返回的信息

    现在的项目是前后端开发的居多,那么我们怎么定义接口返回的数据,怎么使用 Spring Boot 来统一处理返回的信息呢,本文就来和大家简单讲讲
    2023-06-06
  • java文件删除不了File类的delete方法删不掉文件的原因以及分析

    java文件删除不了File类的delete方法删不掉文件的原因以及分析

    这篇文章主要介绍了java文件删除不了File类的delete方法删不掉文件的原因以及分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论