ie中 https(SSL)不能下载问题解决方案 - javaee

来源:互联网 发布:mssql 查找语句进程 编辑:程序博客网 时间:2024/05/22 01:52

前几天在把几个web应用配置为https (SSL)时出现了一个问题 搞了几天 查了资料才解决

我在csdn的论坛上也提了这个问题可以没有人回答,这里就不详细描述问题了 问题查看:http://topic.csdn.net/u/20120320/11/7bdeb2a1-231c-4302-b051-4e02d139d572.html


问题剖析:这是ie的一个bug,详见:http://support.microsoft.com/kb/323308

大概就是ie在https上当服务器返回的文档头Header里设置的缓存(Cache-Control)t和Pragma为private时下载资源文件就有问题了 ,但是设置为public了就没有问题了

我这里就以我出现的问题说明解决方法,我的问题是flex项目使用https后flash加载不成功

在web.xml中加filter对swf过滤,设置Cache-ControlPragmapublic 

filter 如下:

[java] view plaincopyprint?
  1. public class SwfSSLFilter implements Filter {  
  2.   
  3.     public void destroy() {  
  4.   
  5.     }  
  6.   
  7.     public void doFilter(ServletRequest request, ServletResponse response,  
  8.             FilterChain chain) throws IOException, ServletException {  
  9.   
  10.         HttpServletRequest httpServletRequest = (HttpServletRequest) request;  
  11.         HttpServletResponse httpServletResponse = (HttpServletResponse) response;  
  12.   
  13.         // 通过https访问swf时   
  14.         if (httpServletRequest.getScheme() == "https"  
  15.                 && httpServletRequest.getRequestURI().endsWith(".swf")) {  
  16.             httpServletResponse.setHeader("Expires""0");  
  17.             httpServletResponse.setHeader("Pragma""public");  
  18.             httpServletResponse.setHeader("Cache-Control",  
  19.                     "must-revalidate, post-check=0, pre-check=0");  
  20.             httpServletResponse.setHeader("Cache-Control""public");  
  21.         }  
  22.   
  23.         chain.doFilter(request, response);  
  24.   
  25.     }  
  26.   
  27.     public void init(FilterConfig filterConfig) throws ServletException {  
  28.   
  29.     }  
  30.   
  31. }  

web.xml:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5.     <filter>  
  6.         <display-name>SwfSSLFilter</display-name>  
  7.         <filter-name>SwfSSLFilter</filter-name>  
  8.         <filter-class>com.the4thcity.mg.filters.SwfSSLFilter</filter-class>  
  9.     </filter>  
  10.     <filter-mapping>  
  11.         <filter-name>SwfSSLFilter</filter-name>  
  12.         <url-pattern>/*</url-pattern>  
  13.     </filter-mapping>  
  14.   
  15.     <login-config>  
  16.         <!-- Authorization setting for SSL -->  
  17.         <auth-method>CLIENT-CERT</auth-method>  
  18.         <realm-name>Client Cert Users-only Area</realm-name>  
  19.     </login-config>  
  20.     <security-constraint>  
  21.         <!-- Authorization setting for SSL -->  
  22.         <web-resource-collection>  
  23.             <web-resource-name>SSL</web-resource-name>  
  24.             <url-pattern>/*</url-pattern>  
  25.         </web-resource-collection>  
  26.         <user-data-constraint>  
  27.             <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
  28.         </user-data-constraint>  
  29.     </security-constraint>  
  30.   
  31. </web-app>  

主要是以下处理

[java] view plaincopyprint?
  1. httpServletResponse.setHeader("Expires""0");  
  2. httpServletResponse.setHeader("Pragma""public");  
  3. httpServletResponse.setHeader("Cache-Control",  
  4.             "must-revalidate, post-check=0, pre-check=0");  
  5. httpServletResponse.setHeader("Cache-Control""public");  
[java] view plaincopyprint?
  1.   
如时其它语言的程序,就是在响应(Response)中设置header的以上几个属性