因为struts2阻塞tokenSession的id值相同的访问,最初的访问结束后直接返回到正常处理代码,后面的访问略过,即只处理第一次访问。
按理说使用tokenSession可以不配置invalid.token的result,但是偶尔有种情况会提示“No result defined for action com.syq2cy.test.LoginAction and result invalid.token”,就是如下情况:
在<s:token/>的页面点击提交时,form提交前做了一次ajax访问,在这次ajax访问中会做tokenSession的id判断,但ajax访问未将tokenSession作为参数提交到后台,就会返回invalid.token。代码:
@Override
protected String handleToken(ActionInvocation invocation) throws Exception {
//see WW-2902: we need to use the real HttpSession here, as opposed to the map
//that wraps the session, because a new wrap is created on every request
HttpSession session = ServletActionContext.getRequest().getSession(true);
synchronized (session) {
if (!TokenHelper.validToken()) { //判断参数中是否有tokenSession ajax返回false
return handleInvalidToken(invocation); // 走这
}
return handleValidToken(invocation);
}
}
protected String handleInvalidToken(ActionInvocation invocation) throws Exception {
ActionContext ac = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
String tokenName = TokenHelper.getTokenName();
String token = TokenHelper.getToken(tokenName);
if ((tokenName != null) && (token != null)) { // 都是null
......
}
return INVALID_TOKEN_CODE; // 即invalid.token
}
解决办法:
<interceptor-ref name="token">
<param name="includeMethods">login</param> // 加上这个就ok了
</interceptor-ref>
另:1、Unexpected Exception caught setting 'token' on...这个东西不必在意,是params的问题。
2、很多博客上都说第一次访问tokenSession比对成功后,session重新弄个数,这是不对的,应该是从session中清空这次的tokenSession,所以第二次访问的时候session中的tokenSession已经是null了,代码:public class TokenHelper{
public static boolean validToken(){
...
session.remove(tokenSessionName);
}
}
作者:sunyq
相关推荐
需要注意的是,在这里没有指定`invalid.token`的Result,因为`tokenSession`拦截器在检测到重复提交时,不会重定向到任何页面,而是阻止重复的请求并允许正常的请求继续执行。 #### 五、`tokenSession`拦截器的工作...
Invalid CSRF Token(解决方案).md
在使用ArcGIS 9.3时,可能会遇到一些卸载问题,特别是涉及到license授权的问题。在本场景中,用户遇到了“invalid install.log file”的错误,这通常发生在尝试卸载ArcGIS 9.3时,系统无法正确读取或验证安装日志...
Invalid Session(解决方案).md
Delphi 10.3 ,程序运行到DataModule2.ClientDataSet1.ApplyUpdates(0);语句时,提示“Invalid parameter”错误
两步,帮助大家很容易实现卸载。 (1)下载压缩包并解压得到install.log文件 (2)找到License的默认安转路径,找到卸载工具unwise32.exe,双击打开,选择(1)步下载的install.log文件,并点击next,即可实现完全...
Invalid Token(解决方案).md
在使用OneNet一键token工具时,开发者需要了解以下几个关键知识点: 1. **OneNet平台**:这是中国移动提供的物联网开放平台,提供数据接入、存储、处理、分析及应用开发等服务。 2. **API接口**:OneNet平台提供了...
Invalid or expired token(解决方案).md
在本案例中,我们遇到的问题是尝试卸载GIS 9.3时遇到了“invalid install.log file”的错误。这通常意味着在卸载过程中,系统无法找到或读取必要的安装日志文件,导致卸载过程受阻。 为了解决这个问题,我们需要...
return jsonify(error='Invalid token'), 401 return func(user, *args, **kwargs) return wrapper return decorator if __name__ == '__main__': app.run(debug=True) ``` 在上述代码中,`authenticate`函数...
打开lisense manager的安装目录,点uninstall,选择下载的install。log,祝各位好运。当然也可以选择window install cleaner up移除。
前端javascript,获取七牛token,判断有没有失效,失效重新获取,未失效存到缓存下次使用。
然而,在使用过程中,用户可能会遇到一些问题,比如“Format '%x' invalid or”这样的错误提示,这通常是由于软件内部格式处理的问题或者与自定义库的兼容性引起的。为了解决这个困扰用户的难题,我们可以深入探讨这...
InvalidSignature-The signature is invalid(解决方案).md
明明1.2的版本号要大于1.15,怎么还会出现错误提示呢? 查了资料才知道原来如此: ①取版本号要规范 ②version版本号就是CFBundleShortVersionString,也是ITC上的对外版本号,build版本号就是CFBundleVersion也是...
解析主机为: 112.125.43.138 已连接. 正等待响应. 220 Microsoft FTP Service USER 123000 331 Password required for 123. ...500 Invalid PORT Command. PASV 227 Entering Passive Mode (10,247,80,183,117,51).
在IT领域,遇到“打开vs提示invalid handle”的问题并不罕见,这通常意味着Visual Studio(简称VS)在尝试访问某些资源或执行特定操作时遇到了错误。此类问题可能源于多种因素,包括但不限于权限问题、系统资源冲突...