• 两次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 }
    
    

     



    这个办法肯定不适用于所用人,但能够适用于大部分人就好了,
  • 相关阅读:
    论文阅读 | Spatial Transformer Networks
    Latex的各种帽子
    SiamFC网络影响
    Faster RCNN Tensorflow在测试时得到的result.txt文件
    ubuntu16.04使用docker部署TFserving之安装docker
    ubuntu系统使用Faster RCNN训练自己的数据集
    pandas基础1数据结构介绍
    numpy基础4线性代数等
    numpy基础3通用函数等
    numpy基础2索引和切片
  • 原文地址:https://www.cnblogs.com/yyKong/p/12206761.html
Copyright © 2020-2023  润新知