http://blog.chinaunix.net/uid-26642709-id-3061264.html

使用session token时,必须用struts2表标签库,不能用html
通过session token防止重复提交:
当客户端请求页面时,服务器会通过token标签生成一个随机数,并且将随机数放置到session当中,然后将随机数发向客户端;如果客户第一次提交,那么浏览器会将该随机数发往服务器,服务器端会接收到该随机数并且与session中所保存的随机数进行比较,这时两者的值是相同的,服务器认为是第一次提交,并且将更新服务器端的这个随机数值;如果此时再次重复提交,那么客户端向服务器端的随机数还是之前的那个,而服务器端的随机数则已经发生了变化,两者不同,服务器就认为这事重复提交,进而转向invalid.token所指向的结果页面。
 
token.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@taglib prefix = "s" uri= "/struts-tags"   %>  
  <body>
 <s:form action = "token.action" theme = "simple">
 username: <s:textfield name = "username"></s:textfield><br>
 password:<s:password name = "password"></s:password><br>
 
 <s:token></s:token>
 <s:submit value = "submit "></s:submit>
  
 </s:form>
  </body>
</html>
struts.xml
    <action name = "token" class = "com.shengsiyuan.struts2.TokenAction">
     <result name = "success">/tokenSuccess.jsp</result>
     <result name = "invalid.token">tokenFail.jsp</result> <!-- 次是不时input,算是特例 -->
  <interceptor-ref name = "token"></interceptor-ref>
  <interceptor-ref  name= "defaultStack"></interceptor-ref>
    </action>
   
TokenAction.java
package com.shengsiyuan.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class TokenAction extends ActionSupport 
{
 private String username ; 
 private String password ;
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 } 
 @Override
 public String execute() throws Exception {
  return SUCCESS ;
 }
}
tokenSuccess.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@taglib prefix = "s" uri = "/struts-tags" %>
 <html>
  <body>  
 username:<s:property value = "username"/><br>
 password:<s:property value = "password"/>
 
  </body>
</html>
tokenFail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
  <body>
 不用重复提交表单
  </body>
</html>

(转载)session token机制的更多相关文章

  1. atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制

    atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制 1. token机制and  session保持状态机制 1 ...

  2. javaEE开发中使用session同步和token机制来防止并发重复提交

    javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可 ...

  3. Token机制,session机制

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他? session机制:就是一个id号(cookie里面携带一个sessionid), ...

  4. Jmeter的代理和cookie/session/Token令牌认证

    Jmeter的代理服务器 1.启动Jmeter: 2.“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:Global Settings下面的端口配置:9 ...

  5. 前后端分离中的无痛刷新token机制

    今天我们来说一说前后端分离中的无痛刷新token机制 博主先来分享一波福利,最近挖到的宝藏,刚开始学Java的同学看 https://www.bilibili.com/video/BV1Rx41187 ...

  6. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

  7. Session执行机制与原理

    Session执行机制与原理 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Session 首先了解一下Session的中文意思:一次会话,什么是一次会话呢?我举个例子:就我们现 ...

  8. cookie, session, token 是什么 以及相应的安全考量

    Cookie cookie 最常见的是用来保存一些账号信息,比如下图里的 记住账号 就是记录到了cookie里面 cookie 更主要的是针对和server通信的,我们知道http 是无状态的,那如果 ...

  9. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

随机推荐

  1. js ==与===区别(非严格相等与严格相等)

    基本数据类型:number.string.boolean.undefined.null 高级数据类型:object 表格形式比较: 比较的类型 == === 基础类型 不同基础类型间比较," ...

  2. POJ1639顶点度限制最小生成树

    题目:http://poj.org/problem?id=1639 见汪汀的<最小生成树问题的拓展>. 大体是先忽略与根节点相连的边,做一遍kruscal,得到几个连通块和一个根节点: 然 ...

  3. maven学习(2)-在Eclipse 中使用Maven

    第一节:m2eclipse 插件安装 打开Eclipse,点击菜单Help - > Install New Software 点击Add 按钮Name:m2e location: http:// ...

  4. 关于String str =new String("abc")和 String str = "abc"的比较--转

    原文地址:https://www.cnblogs.com/OnlyCT/p/5433410.html String是一个非常常用的类,应该深入的去了解String 如: String str =new ...

  5. bootstrap导航条等样例持续更新》。。

    1.导航条 <!-- 导航条 --> <nav class="navbar navbar-static-top navbar-inverse"> <d ...

  6. js区分大小写

    JavaScript 区分大小写 区分大小写 JavaScript 语言是区分大小写的,不管是命名变量还是使用关键字的时候. 如前面 alert弹出提示框 的例子,如果将 alert 命令改为 ALE ...

  7. 【精】Linux磁盘I/O性能监控之iostat详解

    [精]Linux磁盘I/O性能监控之iostat详解 Linux命令详解----iostat 使用iostat分析IO性能

  8. Monit安装与配置

    Monit安装与配置 monit 监控并自动重启服务 官方文档

  9. javascript中有关this的解析题

    1.作用域链 作用域:浏览器给js一个生存环境(栈)内存 作用域链:js中的关键字var function 都可以提前声明和定义,提前声明和定义,放在我们的内存地址(堆)内存中,然后js从上到下逐行执 ...

  10. post 中文数据到elasticsearch restful接口报json_parse_exception 问题

    我们的客户端程序直接调用es 的restful接口, 通过post json数据去查询, 但post数据有中文的时候,有些中文会报异常,有些中文不会 {"error":{" ...