请求地址中主动携带Cookies信息通过登录验证

简介: 最近在做一个机关单位的项目,他们的项目基本都是部署在内部网络中,并且都做了单点登录验证,即就是该网站上挂载了许多的系统和应用,访问其中的某一个系统和应用的时候,都会被单点登录拦截在登录页面,必须登录该网站,才能访问其中的系统及应用

一、背景

最近在做一个机关单位的项目,他们的项目基本都是部署在内部网络中,并且都做了单点登录验证,即就是该网站上挂载了许多的系统和应用,访问其中的某一个系统和应用的时候,都会被单点登录拦截在登录页面,必须登录该网站,才能访问其中的系统及应用

二、问题描述

该项目中使用了第三方插件,即在线 Office 插件,在线 Office 插件的原理无外乎也就是和浏览器兼容一个插件,在浏览器中通过该插件调取本地的 Office 软件,例如 WPS 等。代码如下:

// 初始化插件
var Application;
Application = init("yozo", "100%", $(window).height());
Application.ActionEnabledWithYozoID(4, false);
Application.openDocumentRemote(serverBaseUrl + '/file/getFileStream.action?id=${id}', false);
Application.enableProtect(true);
Application.setToolbarAllVisible(false);

以上是在 JSP 页面中打开在线 Office 插件的部分代码。我们可以看出,我们唯一给到这个插件的东西就是文件流的地址,我们的文档都是以二进制的方式保存在数据库的

当插件调取本地 Office 软件的时候,会将这个地址传给本地 Office 软件,那么传给它的仅仅是 API 地址而已,并没有 Cookies 信息,当调取这个 API 地址时,就会被前面我们说到的单点登录给拦截到,导致获取不到数据,打不开文档



可以看出,我们在页面正常访问项目的时候,每个请求都会自动携带一个 Cookies 信息,里面放入了 JSESSIONID,这是我们通过单点登录的唯一凭证

三、解决方案

既然本地 Office 软件在发起请求的时候没有带上 Cookies 信息,那么就只有我们手动给它传输 Cookies 信息了

  • 1、获取 JSESSIONID
<%String sessionId = request.getSession().getId();%>
  • 2、手动传输 Cookies 信息
Application.openDocumentRemote(serverBaseUrl + '/file/getFileStream.action;jsessionid=<%=sessionId%>?id=${id}', false);

这里尤为注意,不能将 jsessionid 跟在参数后面,这样服务器会把 jsessionid 作为参数处理,也是无法传输 Cookies 信息的

这样,我们就在请求地址中手动传入了 Cookies 信息,可以通过登录验证了

目录
相关文章
|
6月前
|
前端开发
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
解决前端ajax跨域请求不携带cookie信息JSESSIONID的问题
|
缓存 小程序 前端开发
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
329 0
|
Java 数据库 Maven
根据请求中接收到的主动协商头字段,目标资源没有用户代理可以接受的当前表示
今天使用ssm框架搭建了一个项目,测试一个插入的接口结果返回406,但是数据库插入成功了,报错406是因为返回的结果接口无法解析。
854 0
|
6月前
发送带cookie的请求
发送带cookie的请求
56 1
|
3月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
167 1
|
6月前
|
缓存 安全
控制浏览器发送请求采用请求方式的详细介绍
本文讲述了HTTP请求的GET和POST两种主要方式。GET请求限制参数不超过4K,参数显示在地址栏并缓存资源;POST请求能携带任意数量参数,参数隐藏在请求体,不保存资源。GET常用于超链接和表单默认提交,POST适用于文件上传、登录验证和获取实时数据等场景,因安全考虑,部分网站仅接受GET请求。可通过表单的method属性设置请求方式,默认为GET。
95 0
|
6月前
|
数据采集 存储 安全
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
|
缓存 小程序 NoSQL
【Uniapp】小程序携带Token请求接口+无感知登录方案
【Uniapp】小程序携带Token请求接口+无感知登录方案
279 0
|
存储 Java 应用服务中间件
客户端会话跟踪技术 Cookie 浅谈
客户端会话跟踪技术 Cookie 浅谈
139 0
|
前端开发 测试技术
【测试平台开发】21. 完成发送接口请求显示响应头信息
【测试平台开发】21. 完成发送接口请求显示响应头信息
【测试平台开发】21. 完成发送接口请求显示响应头信息