uploadify http 302问题说明
HTTP 说明 问题 302
2023-09-11 14:19:05 时间
在项目中用到uploadify的程序员应该遇到这个http 302的错误,其实这个原因的根本原因在于你在执行后台代码之前用session进行登录验证。所以最简单的解决这个问题的方法是在上传文件的代码块中把session登录验证的代码块去掉。当然这个方法不可取,下面先分析这个问题出现的原因及另一种解决方式
下面先给导致问题出现的代码
uploader : "/acr/user/rqs/iconupload",//此为uploadify插件向后台发送请求的url
@Login//登录验证
@RequestMapping(value = "/iconupload", method = RequestMethod.POST)
public @ResponseBody
String iconUpload(
@RequestParam MultipartFile file,
Model model,HttpSession session,
HttpServletRequest request) throws Exception {
String root = "/srv/icons/icon";
return FileUtil.upload(file, root,request);
}
这段代码会报302错误。302状态码 表示请求发生了暂时性转移,且302 重定向是临时性转移。如果去掉@login不进行登录则不会出现此问题。所以不难理解问题的关键在于登录验证的逻辑。登录验证的一般逻辑是获取session保存的用户名name, 如果name==null的话就重定向到登录界面,所以这个302的问题就不难发现了:关键在于这个session中没有保存该name。在这里你可能会想怎么可能?我已经登录了,且把name保存在session中,怎么可能会在登录验证的时候name == null???所以只有一种情况,此session非彼session!!!!说明uploadify在向后台发送请求的时候重新生成了一个session。
我们知道在第一次访问服务器的时候,服务器开启一个session(此处假设为S1)发给浏览器一个jsessionid(此处假设jsessionid=1)。在以后的发起的每一个请求中浏览器会把这个jsessionid重新发给服务器来定位S1,因为session.getId() == jsessionid==1.并从S1中获取name来验证用户是否登录。
当用uploadify的时候,通过iconUpload方法参数中的session获取此session的id,即:session.getId().经过测试发现此时的session.getId() != 1,由此可见这个session已经不是原来的那个session了。
既然是通过jsessionid来定位当前用户的session,那么解决这个问题的方法很自然的就出现了,即在url后面加上“;jsessionid=”+1(或S1.getId()),手工指定jsessionid == 1(S1.getId())来定位正确的session(S1)就可以了。所以改正后的代码如下
uploader: "/acr/user/rqs/iconupload;jsessionid="+"<%=request.getSession().getId()%>",
注意此处iconupload后面是“;"而不是“?".(貌似有点乱,不当之处还请指正,共同学习)
相关文章
- .Net 性能优化--缓存--http缓存
- HTTP笔记(一)
- IIS上Put操作出现HTTP Error 405.0 - Method Not Allowed 解决方法
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器同步输出http-flv协议流是怎么实现的?
- 阿里云宣布CDN服务支持HTTP/2 访问速度最高可提升68%
- K8S报错:controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252
- docker如何设置http proxy代理
- 如何让 ABAP 服务器能够响应通过浏览器发起的自定义 HTTP 请求的试读版
- 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据试读版
- Atitit 返回http500返回码,以及自定义返回提示 目录 1. 可以看到从php发送http响应代码的三种方法:1 1.1. Header("HTTP/1.1 404 Not Found"
- 架构设计--用户端全http参数接口详细说明v1
- 使用 http-proxy 代理 SAP UI5 应用发起的 HTTP 请求
- DWR框架简单实例 (http://my.oschina.net/u/1790925/blog/366346)
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
- 【问题解决】[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed wite
- 关于http请求编码问题的说明(转)
- 【云原生 | Envoy 系列】--Envoy Http Ingress,Egress,front Proxy静态配置