关于使用isTokenValid
的那个方法:
一,首先介绍一下struts
提供的有关令牌环的相关方法
请求有效性处理,
使用令牌可以有效的防止重复提交。
protected String
generateToken(HttpServletRequest request)
创建一个令牌.
protected boolean
isTokenValid(HttpServletRequest request)
检查令牌是否有效
protected boolean
isTokenValid(HttpServletRequest request,Boolean reset)
检查令牌是否有效,并且重置令牌(如果reset
是true
)
protected void
resetToken(HttpServletRequest request)
重置令牌
protected void
saveToken(HttpServletRequest request)
添加令牌
二,利用struts
的同步令牌机制
利用同步令牌(Token
)机制来解决Web
应用中重复提交的问题,Struts
也给出了一个参考实现。
基本原理:
服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,
看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给
客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次
提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
-
-
if (isTokenValid(request, true)) {
-
// your code here
-
return mapping.findForward("success");
-
} else {
-
saveToken(request);
-
return mapping.findForward("submitagain");
-
}
Struts
根据用户会话ID
和当前系统时间来生成一个唯一(对于每个会话)令牌的,具体实现可以参考
TokenProcessor
类中的generateToken()
方法。
1. //
验证事务控制令牌,<html:form >
会自动根据session
中标识生成一个隐含input
代表令牌,防止两次提交
2.
在act
ion
中:
-
-
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
-
// value="6aa35341f25184fd996c4c918255c3ae">
-
if (!isTokenValid(request))
-
errors.add(ActionErrors.GLOBAL_ERROR,
-
new ActionError("error.transaction.token"));
-
resetToken(request);
//
删除session
中的令牌
3. act
ion
有这样的一个方法生成令牌
-
-
protected String generateToken(HttpServletRequest request) {
-
-
HttpSession session = request.getSession();
-
try {
-
byte id[] = session.getId().getBytes();
-
byte now[] =
-
new Long(System.currentTimeMillis()).toString().getBytes();
-
MessageDigest md = MessageDigest.getInstance("MD5");
-
md.update(id);
-
md.update(now);
-
return (toHex(md.digest()));
-
} catch (IllegalStateException e) {
-
return (null);
-
} catch (NoSuchAlgorithmException e) {
-
return (null);
-
}
}
声明:
提交表单时,必须使用html
标签,
否则token
不能用
但是一种方法可以解决该问题:
在页面中加入一个隐藏域
<input type="hidden"
name="org.apache.struts.taglib.html.TOKEN"
value="<%(String)session.getAttribute(
Globals.TRANSACTION_TOKEN_KEY)%>">
因为,Struts
产生的令牌Key
存放在Session
内
分享到:
相关推荐
阿波罗链接刷新令牌 用于在身份验证错误时刷新身份验证令牌的链接 入门 安装软件包: yarn add apollo-link-refresh-token 将链接添加到您的阿波罗客户端: ...const isTokenValid = ( token : string )
还记得幻灯片中的isTokenValid函数吗? 将身份验证逻辑移至上下文,并确保未发布的帖子仅对经过身份验证的用户可见。 除了身份验证,还向您的GraphQL服务器添加基于角色的授权。 在模式中创建一个称为views的
2层设计-2.4G RF高频信号收发模块硬件(cadence原理图+PADS PCB图+BOM)文件,可供学习及设计参考。
FTP(File Transfer Protocol)是文件传输协议的简称。 FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。 目前FTP服务器软件都为国外作品,例如Server_U、IIS,国内成熟的FTP服务器软件很少,有一些如(Crob FTP Server),但从功能上看来远不能和那些流行的服务器软件媲美。
语音端点检测及其在Matlab中的实现.zip
Matlab 交互式多模型目标跟踪IMM.zip
numpynumpy试题(2021年整理精品文档).zip
【作品名称】:基于Python+Django城市PM2.5空气质量数据可视化分析系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: Python基于Django城市PM2.5空气质量数据可视化分析 开发软件:Pycharm + Python3.7 + Django + Echarts + Mysql 实现目标:利用已经收集各个城市包括北京、上海、广州、成都、沈阳的PM2.5空气数据,利用python进行各种数据分析,将分析结果保存到csv文件中,然后利用django框架的网站,前端采用echart对分析的结果进行图表可视化展示。
c#实现求解白拉修斯方程。程序使用文件流,四阶龙哥库塔法
单片机3.DSN
NumPy 的用途是什么
Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)Java游戏设计打飞机程序(源代码+LW)
Java项目之企业人事工资管理系统(源码) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9
vb.net做的教务管理系统 功能完善 后台数据库使用的acce.zip
Nvidia 17.1最新win10&Win11 vGPU驱动 名称:551.78_grid_win10_win11_server2022_dch_64bit_internationa
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。
参考文献: [1]李明轩,齐步洋,贺大玮.工业园区需求响应资源聚合优化配置方法[J].电网技术,2022,46(09):3543-3549.DOI:10.13335/j.1000-3673.pst.2021.1666. 1.摘要 需求响应资源数量的不断提升对响应资源的优化运行方法提出了更高的要求。面向工业园区内负荷聚合商开展日内需求响应的应用场景,提出了一种资源聚合优化配置方法,即在日前时段对响应资源预先聚合优化形成一定数量满足 特定条件的聚合体,再在日内运行时段对各聚合体进行优化调用以满足电网侧需求。该方法实现对数量庞大、分散存在、特性各异的资源的灵活聚合和优化配置,充分发挥各资源响应潜力和互补特性,并通过将大量求解计算从日内转移至日前时段,平衡了响应实时性要求与计算规模的矛盾。通过算例分析验证了所提模型与方法的合理性和有效性。
毕业设计[主机域名]HostDirector v1.01_hostdirector101.zip
基于MATLAB的pca人脸识别.zip
Qt+OpenCV通用视觉框架全套源码.zip.008