两次http请求获取的session内容不一致,但又希望能够判断token怎么办

   先抛出问题 为什么第二次从A系统请求B系统的Session发现东西没了。但是需要取出来比较,这可怎么办?
   别急,希望看完能帮到你

因为通过http去获取token,然后接口那边将token存放到session,token返回时你需要带着token去请求别数据/其他操作(什么操作我不管)下面说一下之前的一个demo我需要通过www.token.com/getToken(举例)获取token接口条用getTokenString(HttpSession session)方法,然后将获取的token保存至一个arrayList,在保存进session这个时候你通过另一个项目发送的请求,request请求域中session是空的,但是当你在当前系统中request请求域中的session不是一个空值当请求域中的session是空的时候,会new一个session,那么你的token就保存在了一个新创建的session这时你将token返回,带着token去请求另一个接口,但是这时你需要验证第一token是否重复使用了,第二就是时效性这里我调用的是isTokenStringValid(String tokenStr, HttpSession session)方法验证token,获取token又要从请求域中拿一个session传参,这时候你会发现你请求域中的session又是空的,那么这时你的token肯定验证失败的因为session为空,程序有new了一个新的session,存token和取token在两个不同的的session里,肯拿不到。你们肯定会问了,这是什么问题,这个难道没有解决办法吗?其实这是个跨域的问题,我暂时是没想到什么好的方案,都比较麻烦但实际上token可以不存session中,其实放在arrayList中就可以了。可能有人要说,玩意程序挂了,token不就没了,那你放session里不是一样没了其实只要程序没挂,放arrayList是一样的下面贴两分代码,一份是放session的,另一份是放arrayList,

   放sessio如下:
 1 package com.ilas.union.bigdataPlatform.common.util;
 2
 3 import javax.servlet.http.HttpSession;
 4 import java.util.ArrayList;
 5 import java.util.UUID;
10
11 public class TokenUtli {
12     private static final String TOKEN_LIST_NAME = "tokenList";
13
14     private static ArrayList getTokenList(HttpSession session) {
15         Object obj = session.getAttribute(TOKEN_LIST_NAME);
16         if (obj != null) {
17             return (ArrayList) obj;
18         } else {
19             ArrayList tokenList = new ArrayList();
20             session.setAttribute(TOKEN_LIST_NAME, tokenList);
21             return tokenList;
22         }
23     }
24
25     private static void saveTokenString(String tokenStr, HttpSession session) {
26         ArrayList tokenList = getTokenList(session);
27         tokenList.add(tokenStr);
28         session.setAttribute(TOKEN_LIST_NAME, tokenList);
29     }
30
31     private static String generateTokenString(){
32         return Long.toString(System.currentTimeMillis())+"_"+UUID.randomUUID().toString();
33     }
34
35
36     public static String getTokenString(HttpSession session) {
37         String tokenStr = generateTokenString();
38         saveTokenString(tokenStr, session);
39         return tokenStr;
40     }
41
42
43
44     public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
45         boolean valid = false;
46         if(session != null){
47             ArrayList tokenList = getTokenList(session);
48             if (tokenList.contains(tokenStr)) {
49                 valid = true;
50                 tokenList.remove(tokenStr);
51             }
52         }
53         return valid;
54     }
55
56 }
    放arrayList如下:
 1 package com.common.utils;
 2
 3 5 import java.util.ArrayList;
 6 import java.util.UUID;
11
12 public class TokenUtli {14     private static ArrayList tokenList = new ArrayList();
15
16     private static ArrayList getTokenList() {18         if (tokenList != null) {
19             return tokenList;
20         } else {
21             ArrayList tokenList = new ArrayList();
23             return tokenList;
24         }
25     }
26
27     private static void saveTokenString(String tokenStr) {
28         tokenList = getTokenList();
29         tokenList.add(tokenStr);
31     }
32
33     private static String generateTokenString(){
34         return Long.toString(System.currentTimeMillis())+"_"+UUID.randomUUID().toString();
35     }
36
37
38     public static String getTokenString() {
39         String tokenStr = generateTokenString();
40         saveTokenString(tokenStr);
41         return tokenStr;
42     }
43
44
45
46     public static boolean isTokenStringValid() {
47         boolean valid = false;
48         if(tokenList!= null){
49             ArrayList list = tokenList;
50             if (list.contains(tokenStr)) {
51                 valid = true;
52                 list.remove(tokenStr);
53             }
54         }
55         return valid;
56     }
57
58 }


这个办法肯定不适用于所用人,但能够适用于大部分人就好了,

原文地址:https://www.cnblogs.com/yyKong/p/12206761.html

时间: 2024-08-30 13:38:32

两次http请求获取的session内容不一致,但又希望能够判断token怎么办的相关文章

[python]获取网页中内容为汉字的字符串的判断

IPerf%E2%80%94%E2%80%94%E7%BD%91%E7%BB%9C%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D%E4%B8%8E%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%904 ?????DbYE1tZV??x?????g ????o12dt6wwG???ó??????? http://auto.315che.com/tyrs/qa23824193.htm?hwx http://auto.3

页面静态化-http get请求获取页面内容代码

1 import org.apache.http.HttpEntity; 2 import org.apache.http.HttpException; 3 import org.apache.http.HttpResponse; 4 import org.apache.http.client.HttpClient; 5 import org.apache.http.client.methods.HttpGet; 6 import org.apache.http.client.methods.H

html页面通过ajax请求获取session中的值

在利用springboot进行web开发时,遇到这样一个问题:html如何获取session中的值,实现用户登录系统后首页展示xx欢迎您. 也就是需要实现html通过ajax请求获取session中的值. 1.登录页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <meta charset="utf-8"> <meta http-equiv=&quo

Fiddler插件 --- 解密Elong Mapi请求参数及响应内容

当前问题: 在我们日常的Web/App测试过程中, Fiddler是一大辅助利器:在我们团队,也经常使用Fiddler进行App抓包测试. 艺龙 App使用的REST(内部称为Mapi)接口,在使用过程中有如下特点: 1.接口请求入参:不论是GET还是POST接口:为保证隐私及数据安全,其入参均会经过一次AES加密:然后做一次Encode处理: 比如: 好吧,不经过解密,我也不知道req参数中又臭又长的到底是什么鬼: 2.接口响应,一般是经过Gzip或lzss压缩的: 这就导致在使用Fiddle

spring mvc controller中获取request head内容

spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public String print(@PathVariable Integer mlid, @PathVariable String ptn, @PathVariable String name, HttpSession session, Model model, @RequestHeader String referer,

用来实现对紧邻的相同的标签元素的内容和两对标签之间的非标签内容进行合并

源文件: <?xml version="1.0" encoding="UTF-8"?> <Body> <Title>4月7日凌晨5时,近300名穿着"警察"制服</Title> <ReportTime type="absTime">2014年4月11日07:00</ReportTime> <Content> <Paragraph>

Android设备怎么获取扫码枪扫描内容

1. 蓝牙配对,连接设备 打开系统设置,找到蓝牙,打开扫码枪,配对扫码枪设备.输入一个固定的配对码,一般扫码枪说明书里都有写.配对完成后,显示设备已连接.就ok. 2.AndroidManifest中配置权限 android项目中的AndroidManifest.xml文件添加蓝牙权限. <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:na

JavaScript(19)jQuery HTML 获取和设置内容和属性

jQuery HTML jQuery 拥有可操作 HTML 元素和属性的强大方法. jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力.jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易. 提示:DOM = Document Object Model(文档对象模型) DOM 定义访问 HTML 和 XML 文档的标准:"W3C 文档对象模型独立于平台和语言的界面,允许程序和脚本动态访问和更新文档的内容.结构以及样式."

iOS_21团购_发送请求获取【点评】数据

请求结果简单显示: 用到的点评封装的类: 使用tableView简单展示: // // DealListController.m // 帅哥_团购 // // Created by beyond on 14-8-14. // Copyright (c) 2014年 com.beyond. All rights reserved. // 点击dock上面的[团购]按钮对应的控制器,上面是导航栏,导航栏右边是searchBar,导航栏左边是一个大按钮(TopMenu)(内部由三个小按钮组成<TopM