放sessio 如下: 1 package com.ilas.union.bigdataPlatform.common
先抛出问题 为什么第二次从A系统请求B系统的Session发明对象没了。但是需要取出来对照,这可怎么办?
别急,但愿看完能帮到你
因为通过http去获取token,然后接口那边将token存放到session,token返回时
你需要带着token去请求别数据/其他操纵(什么操纵我不管)
下面说一下之前的一个demo
我需要通过(举例)获取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如下:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31472.html