什么是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. jQuery源码浅析

    这几天看了下jQuery源码,有些收获,解答了我以前对jQuery的疑问,现在我把收获分享给大家. 一.jQuery为何弄成自执行函数,以及为何在引用了jquery文件之后,可以通过$或jQuery来 ...

  2. 基于node的前端页面实时更新。呦吼~

    学习了gulp,webpack后越发觉得前端开发万分的有趣,首当其冲的就是解决了狂按f5的尴尬. 当我们按下ctrl+s保存后页面自动更新了,我就觉得我f5键在隐隐的发笑. 1.node_npm_li ...

  3. 图片上传功能(EasyUI前台框架+SSM框架)

    文件上传步骤: * 1.采用文件正确的接收方式(修改3处配置文件/接口类型等) * 2.判断是否为一个图片,0表示无异常,1代表异常(jpg|gif|png) * 3.判断是不是一个“正经”的图片,判 ...

  4. Struts2中使用Session

    嗯,没错,过了这么长时间我还在做我的注册和登录. 登陆的部分自然是从数据库中查找响应的用户信息,然后把一个user放到session里, Action中代码如下: public String Logi ...

  5. 33、Flask实战第33天:sweetalert提示框

    这节我们继续优化,接收到返回值,我们在前端做一些处理,如:密码修改成功,弹出一个成功的提示框.这个提示框我们采用sweetalert 其中xtalert.js是对上面两个文件的一个封装,使得我们用sw ...

  6. 【C++】函数缺省参数的作用

    用法:void func(int param1, int param2 = 1, int param = 3) {} func(10); //等同于func(10, 1 , 3) func(10,8) ...

  7. You are my brother NBUT - 1218

    问题描述 Little A gets to know a new friend, Little B, recently. One day, they realize that they are fam ...

  8. [Atcoder Regular Contest 061] Tutorial

    Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ...

  9. 【Java】【高精度】【组合数】【递推】poj1737 Connected Graph

    http://blog.csdn.net/sdj222555/article/details/12453629 这个递推可以说是非常巧妙了. import java.util.*; import ja ...

  10. python基础之条件判断和循环

    1.条件判断 age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid' ...