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信息是否正确即可,而 ...
随机推荐
- PHP策略设计模式
<?php /** 抽象策略角色,以接口实现 */ interface Strategy { /** 算法接口 */ public function algorithmInterface(); ...
- Python:使用正则去除HTML标签(转)
利用正则式处理,不知道会不会有性能问题,没有经过太多测试. 目前我有很多还是使用BeautifulSoup进行这种处理. HTML实体处理的只是用于处理一些常用的实体. # -*- coding: u ...
- 【转载】RecyclerView使用全解析
崇拜下鸿洋大神,原文地址:http://blog.csdn.net/lmj623565791/article/details/45059587 概述 RecyclerView出现已经有一段时间了,相信 ...
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- VB查询数据库之导出表格——机房收费总结(四)
在机房收费系统中,有几个窗体需要导出数据到EXCEL表格中,如:学生上机记录查询窗体.学生充值记录查询窗体.收取金额查询窗体等. 前面的几篇总结,大家建议我不要把代码写的太详细,这样,不利于读者思考, ...
- 14年安徽省赛数论题etc.
关于最大公约数的疑惑 题目描述 小光是个十分喜欢素数的人,有一天他在学习最大公约数的时候突然想到了一个问题,他想知道从1到n这n个整数中有多少对最大公约数为素数的(x,y),即有多少(x,y),gcd ...
- 【矩阵乘法】Gym - 101412C - One-Dimensional Cellular Automaton
给你一个一维细胞自动机,第i个格子在时刻t的状态是这样获得的,问你t时刻的状态. 把0时刻的状态视作一个列向量,发现状态转移其实是一个n*n的矩阵(以n=5为例), B C A B C ...
- 【置换群】poj3270 Cow Sorting
并不应该叫置换群……只是用到了置换而已,并没有群. 题解看这个吧,我就不写了:http://www.cnblogs.com/kuangbin/archive/2012/09/03/2669013.ht ...
- 【最大流/费用流】BZOJ1834-[ZJOI2010]network 网络扩容
[题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费 ...
- Problem E: 零起点学算法34——3n+1问题
#include<stdio.h> #include<math.h> int main() { int n; n<=pow(,); ; scanf("%d&qu ...