什么是Token:它是一个令牌,随机不可预测的。

为什么需要使用Token: 1,防止表单的重复提交

2:,防止跨站点的请求伪造

Token的使用流程是:首先在服务器端生成一个随机的token值并在服务器端保存起来,然后向客户端请求的过程中把这个Token值传过去。之后页面操作完毕后向服务器提交数据的过程中又把这个Token值传回服务器端,同时比较这个Token值是否已经存在于服务器端,若存在,则此次访问是安全的,并在服务器端把这个Token值删除,若不存在,则此次访问无效。

好,了解Token的用法之后来看代码(项目中可直接粘贴使用)

---------------------------------------------------------------------以下为转载的代码:

(一)首先是Token工具类

  1. package com.company.util;
  2. import java.util.ArrayList;
  3. import javax.servlet.http.HttpSession;
  4. public class Token {
  5. private static final String TOKEN_LIST_NAME = "tokenList";
  6. public static final String TOKEN_STRING_NAME = "token";
  7. private static ArrayList getTokenList(HttpSession session) {
  8. Object obj = session.getAttribute(TOKEN_LIST_NAME);
  9. if (obj != null) {
  10. return (ArrayList) obj;
  11. } else {
  12. ArrayList tokenList = new ArrayList();
  13. session.setAttribute(TOKEN_LIST_NAME, tokenList);
  14. return tokenList;
  15. }
  16. }
  17. private static void saveTokenString(String tokenStr, HttpSession session) {
  18. ArrayList tokenList = getTokenList(session);
  19. tokenList.add(tokenStr);
  20. session.setAttribute(TOKEN_LIST_NAME, tokenList);
  21. }
  22. private static String generateTokenString(){
  23. return new Long(System.currentTimeMillis()).toString();
  24. }
  25. /** *//**
  26. * Generate a token string, and save the string in session, then return the token string.
  27. * @param HttpSession session
  28. * @return a token string used for enforcing a single request for a particular transaction.
  29. */
  30. public static String getTokenString(HttpSession session) {
  31. String tokenStr = generateTokenString();
  32. saveTokenString(tokenStr, session);
  33. return tokenStr;
  34. }
  35. /** *//**
  36. * check whether token string is valid. if session contains the token string, return true.
  37. * otherwise, return false.
  38. * @param String tokenStr
  39. * @param HttpSession session
  40. * @return true: session contains tokenStr; false: session is null or tokenStr is id not in session
  41. */
  42. public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
  43. boolean valid = false;
  44. if(session != null){
  45. ArrayList tokenList = getTokenList(session);
  46. if (tokenList.contains(tokenStr)) {
  47. valid = true;
  48. tokenList.remove(tokenStr);
  49. }
  50. }
  51. return valid;
  52. }
  53. }

(二)JSP页面中

1:先import该Token工具类

  1. <%@ page import="com.company.util.Token" %>

2:在表单中添加隐藏的Token值

  1. <form>
  2. <input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">
  3. </form>

(三)在服务器端Servlet中添加如下代码

    1. if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){
    2. //To Do 业务代码
    3. }

java中Token验证的更多相关文章

  1. UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题

    最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的 ...

  2. koa2,koa-jwt中token验证实战详解

    用户身份验证通常有两种方式,一种是基于cookie的认证方式,另一种是基于token的认证方式.当前常见的无疑是基于token的认证方式.以下所提到的koa均为koa2版本. token认证的优点是无 ...

  3. java中token的生成和验证

    package com.zjn.token; /** * token编码工具类 * @author ouyangjun */ public class TokenEncryptUtils { // 编 ...

  4. Java带token验证的注册登录

    http://blog.csdn.net/huqingpeng321/article/details/52900550 http://blog.csdn.net/l18710006370/articl ...

  5. Java的登陆验证问题

    java中的登陆验证问题可以有多种方式进行验证,通过拦截器功能完成,可以通过过滤器功能完成,也可以简单的代码在JSP页面中单独完成,其中都 涉及到一个关键的验证步骤,这个验证原理ASP,PHP,JAV ...

  6. JAVA中的Token 基于Token的身份验证

    最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的SessionId,导致服务器每次接收安卓发送的请求访问时都 ...

  7. JAVA中的Token

    JAVA中的Token 基于Token的身份验证 来源:转载 最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求 ...

  8. JAVA折腾微信公众平台(Token验证)[转]

    JAVA折腾微信公众平台(Token验证) BAE的JAVA还在内测的时候,抱着好奇的态度发邮件申请了内测权限,当时折腾了一天,然后就没折腾了.现在BAE的JAVA都已经正式开放使用了,我又蛋疼的想写 ...

  9. Java实现token的生成与验证-登录功能

    一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...

随机推荐

  1. js判断网络连接情况:navigator.onLine

    <body> <h1 id="text">websong</h1> </body> <script> var text= ...

  2. 五十 常用第三方模块 PIL

    PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 由于PIL仅支持到Python 2.7,加上年久失修 ...

  3. 洛谷——P2082 区间覆盖(加强版)

    P2082 区间覆盖(加强版) 题目描述 已知有N个区间,每个区间的范围是[si,ti],请求出区间覆盖后的总长. 输入输出格式 输入格式: N s1 t1 s2 t2 …… sn tn 输出格式: ...

  4. 2017腾讯OMG实习生面试总结

    2017腾讯OMG实习生面试总结 一面 一面有两个面试官,轮着来的,一共是一个半小时,中间等了10分钟左右.结合简历问了问项目,也考察了基础,手写了两道简单的算法题.问题包括: 第一个面试官 1.自我 ...

  5. 具有jQuery背景的程序员如何转换为AngularJS思考模式(译)

    最近一直在研究angularjs,最大的感受就是它和之前的jQuery以及基于jQuery的各种库设计理念完全不同,如果不能认识到这点而对于之前做jQuery开发的程序员,去直接学习angularjs ...

  6. 安卓架构 视频 Android 插件化架构设计

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Android 插件化架构设计-Dream老师 自定义SDK =====

  7. 【动态规划去除冗余】NOIP2010-乌龟棋

    [题目大意] [思路] 最简单的思路是五维数组,但是当前走到的步数由已经取到的卡片决定,所以只需要四维.本来想要改一个滚动数组的,但是好像没有滚起来,算了(ノ`Д)ノ. 在学校要晚自习到21:15,回 ...

  8. python3-开发进阶补充Django中的文件的上传

    PS:这段时间有点不在状态,刚刚找回那个状态,那么我们继续曾经的梦想 今天我们来补充一下文件的上传的几种方式: 首先我们先补充的一个知识点: 一.请求头ContentType: ContentType ...

  9. Problem C: 调用函数,求a+aa+aaa+....+aa...aa(n个a)

    #include <stdio.h> int fn(int a,int n)//定义函数 { ; ;i<=n;i++) { m=m+a;//当a=3时,m=3,然后a=30,m=33 ...

  10. Scala 数据类型

    Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型: Byte8位有符号补码整数.数值区间为 -128 到 127 Short16位有符号补码整数.数值区间为 -327 ...