java中Token验证
什么是Token:它是一个令牌,随机不可预测的。
为什么需要使用Token: 1,防止表单的重复提交
2:,防止跨站点的请求伪造
Token的使用流程是:首先在服务器端生成一个随机的token值并在服务器端保存起来,然后向客户端请求的过程中把这个Token值传过去。之后页面操作完毕后向服务器提交数据的过程中又把这个Token值传回服务器端,同时比较这个Token值是否已经存在于服务器端,若存在,则此次访问是安全的,并在服务器端把这个Token值删除,若不存在,则此次访问无效。
好,了解Token的用法之后来看代码(项目中可直接粘贴使用)
---------------------------------------------------------------------以下为转载的代码:
(一)首先是Token工具类
- package com.company.util;
- import java.util.ArrayList;
- import javax.servlet.http.HttpSession;
- public class Token {
- private static final String TOKEN_LIST_NAME = "tokenList";
- public static final String TOKEN_STRING_NAME = "token";
- private static ArrayList getTokenList(HttpSession session) {
- Object obj = session.getAttribute(TOKEN_LIST_NAME);
- if (obj != null) {
- return (ArrayList) obj;
- } else {
- ArrayList tokenList = new ArrayList();
- session.setAttribute(TOKEN_LIST_NAME, tokenList);
- return tokenList;
- }
- }
- private static void saveTokenString(String tokenStr, HttpSession session) {
- ArrayList tokenList = getTokenList(session);
- tokenList.add(tokenStr);
- session.setAttribute(TOKEN_LIST_NAME, tokenList);
- }
- private static String generateTokenString(){
- return new Long(System.currentTimeMillis()).toString();
- }
- /** *//**
- * Generate a token string, and save the string in session, then return the token string.
- * @param HttpSession session
- * @return a token string used for enforcing a single request for a particular transaction.
- */
- public static String getTokenString(HttpSession session) {
- String tokenStr = generateTokenString();
- saveTokenString(tokenStr, session);
- return tokenStr;
- }
- /** *//**
- * check whether token string is valid. if session contains the token string, return true.
- * otherwise, return false.
- * @param String tokenStr
- * @param HttpSession session
- * @return true: session contains tokenStr; false: session is null or tokenStr is id not in session
- */
- public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
- boolean valid = false;
- if(session != null){
- ArrayList tokenList = getTokenList(session);
- if (tokenList.contains(tokenStr)) {
- valid = true;
- tokenList.remove(tokenStr);
- }
- }
- return valid;
- }
- }
(二)JSP页面中
1:先import该Token工具类
- <%@ page import="com.company.util.Token" %>
2:在表单中添加隐藏的Token值
- <form>
- <input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">
- </form>
(三)在服务器端Servlet中添加如下代码
- if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){
- //To Do 业务代码
- }
java中Token验证的更多相关文章
- UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题
最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的 ...
- koa2,koa-jwt中token验证实战详解
用户身份验证通常有两种方式,一种是基于cookie的认证方式,另一种是基于token的认证方式.当前常见的无疑是基于token的认证方式.以下所提到的koa均为koa2版本. token认证的优点是无 ...
- java中token的生成和验证
package com.zjn.token; /** * token编码工具类 * @author ouyangjun */ public class TokenEncryptUtils { // 编 ...
- Java带token验证的注册登录
http://blog.csdn.net/huqingpeng321/article/details/52900550 http://blog.csdn.net/l18710006370/articl ...
- Java的登陆验证问题
java中的登陆验证问题可以有多种方式进行验证,通过拦截器功能完成,可以通过过滤器功能完成,也可以简单的代码在JSP页面中单独完成,其中都 涉及到一个关键的验证步骤,这个验证原理ASP,PHP,JAV ...
- JAVA中的Token 基于Token的身份验证
最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的SessionId,导致服务器每次接收安卓发送的请求访问时都 ...
- JAVA中的Token
JAVA中的Token 基于Token的身份验证 来源:转载 最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求 ...
- JAVA折腾微信公众平台(Token验证)[转]
JAVA折腾微信公众平台(Token验证) BAE的JAVA还在内测的时候,抱着好奇的态度发邮件申请了内测权限,当时折腾了一天,然后就没折腾了.现在BAE的JAVA都已经正式开放使用了,我又蛋疼的想写 ...
- Java实现token的生成与验证-登录功能
一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...
随机推荐
- jQuery源码浅析
这几天看了下jQuery源码,有些收获,解答了我以前对jQuery的疑问,现在我把收获分享给大家. 一.jQuery为何弄成自执行函数,以及为何在引用了jquery文件之后,可以通过$或jQuery来 ...
- 基于node的前端页面实时更新。呦吼~
学习了gulp,webpack后越发觉得前端开发万分的有趣,首当其冲的就是解决了狂按f5的尴尬. 当我们按下ctrl+s保存后页面自动更新了,我就觉得我f5键在隐隐的发笑. 1.node_npm_li ...
- 图片上传功能(EasyUI前台框架+SSM框架)
文件上传步骤: * 1.采用文件正确的接收方式(修改3处配置文件/接口类型等) * 2.判断是否为一个图片,0表示无异常,1代表异常(jpg|gif|png) * 3.判断是不是一个“正经”的图片,判 ...
- Struts2中使用Session
嗯,没错,过了这么长时间我还在做我的注册和登录. 登陆的部分自然是从数据库中查找响应的用户信息,然后把一个user放到session里, Action中代码如下: public String Logi ...
- 33、Flask实战第33天:sweetalert提示框
这节我们继续优化,接收到返回值,我们在前端做一些处理,如:密码修改成功,弹出一个成功的提示框.这个提示框我们采用sweetalert 其中xtalert.js是对上面两个文件的一个封装,使得我们用sw ...
- 【C++】函数缺省参数的作用
用法:void func(int param1, int param2 = 1, int param = 3) {} func(10); //等同于func(10, 1 , 3) func(10,8) ...
- 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 ...
- [Atcoder Regular Contest 061] Tutorial
Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ...
- 【Java】【高精度】【组合数】【递推】poj1737 Connected Graph
http://blog.csdn.net/sdj222555/article/details/12453629 这个递推可以说是非常巧妙了. import java.util.*; import ja ...
- python基础之条件判断和循环
1.条件判断 age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid' ...