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信息是否正确即可,而 ...
随机推荐
- css3翻书效果
强大的css3不需要解释,代码分层理解[直接复制],很有意思. 效果图: <ul class="align"> <li> <figure class= ...
- java 连接 kerberos 认证的 HBase 和 HDFS
这是两个功能,都很简单就写一块了.. 简单到什么程度呢,简单到只贴代码就可以了... HBase package com.miras.data; import org.apache.hadoop.co ...
- python正则的中文处理(转)
匹配中文时,正则表达式规则和目标字串的编码格式必须相同 print sys.getdefaultencoding() text =u"#who#helloworld#a中文x#" ...
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了 ...
- ZOJ 3949 Edge to the Root(想法)(倍增)
Edge to the Root Time Limit: 1 Second Memory Limit: 131072 KB Given a tree with n vertices, we ...
- centos7 crontab管理
crontab -l 当前用户的任务 crontab -e 编辑任务列表 crontab -r 删除当前用户的任务
- hdu 5963 朋友(2016ccpc 合肥站 C题)
朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- AGC 012 D - Colorful Balls
题面在这里! 为什么atcoder都是神仙题啊qwq 首先发现如果要让 x,y 互换位置的话,要么通过他们直接换 (也就是x和y满足两种操作之一),要么间接换,通过一些其他的元素形如 x可以和 a[1 ...
- AtCoder - 3939 Strange Nim
Problem Statement Takahashi and Aoki are playing a stone-taking game. Initially, there are N piles o ...
- 【SAM】BZOJ3998-弦论
[题目大意] 给出一个字符串,求第k大的子串.(输入1表示子串可重复,0表示不可重复) [思路] 显然,k大子串是后缀自动机的经典题型,可以利用后缀自动机的性质来解决.对于字符串 [前铺1]" ...