token的作用及实现原理

1:首先,先了解一下request和session的区别
request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。request是用户请求访问的当前组件,以及和当前web组件共享同一用户请求的web组件。如:被请求的jsp页面和该页面用<include>指令包含的页面以及<forward>标记包含的其它jsp页面;
Session是用户全局变量,在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中 ,同一个http会话中的web组件共享它。
2:token主要有两个作用:①:防止表单重复提交(防止表单重复提交一般还是使用前后端都限制的方式,比如:在前端点击提交之后,将按钮置为灰色,不可再次点击,然后客户端和服务端的token各自独立存储,客户端存储在Cookie或者Form的隐藏域(放在Form隐藏域中的时候,需要每个表单)中,服务端存储在Session(单机系统中可以使用)或者其他缓存系统(分布式系统可以使用)中。)
//在页面初始化的时候调用后端代码像前端返回token
public String initLogin(ModelMap model, HttpSession session, String loginUrl) {

model.put("extLoginView", clientManager.getExtLoginView());

// 生成token

String token = UUID.randomUUID().toString().substring(0,16);

model.put(LOGIN_TOKEN, token);

//返回地址与方法的  String loginUrl一致,即初始化的时候调用完方法后,又回到初始化页面

return loginUrl;

}

②:用来作身份验证
3:防止表单重复提交,主要的理念是,客户端初始化的时候,一般就是刚刚进入页面的时候就调用后端代码,后端代码生成一个token,返回给客户端,客户端储存token(可以在前台使用Form表单中使用隐藏域来存储这个Token,也可以使用cookie),然后就将request(请求)中的token与(session)中的token进行比较:

//跳转到添加页面

@RequestMapping("/add.do")

public String add(HttpServletRequestrequest,HttpServletResponse response){

//生成token

UUID token=UUID.randomUUID();

System.out.println("token的值"+token);

//放入session中

request.getSession().setAttribute("token",token.toString());

//放入request作用域中传到前台

request.setAttribute("token",token);

return "add";

}

//前台穿过来的token进行比对

@RequestMapping("/addMessage.do")

public synchronized String addMessage(HttpServletRequest request){

//获取session中的token

Objecttoken1=request.getSession().getAttribute("token");

//获取前台穿过来的token

String token=request.getParameter("token");

System.out.println("token1的值"+token1);

if(token1==null){

System.out.println("提交出错");

}

else if(!token1.equals(token)){

System.out.println("提交出错");

}else{

System.out.println("提交成功");

//移除session 防止重复提交

request.getSession().removeAttribute("token");

}     return "";

}

4:使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
5:
ajax中传递token的几种方式

方法一:放在请求头中

$.ajax({
type: "POST",
headers: {
Accept: "application/json; charset=utf-8",
userToken: "" + userToken
},
url: "/index",
data: JSON.stringify(mytable.params),
contentType: "application/json",
dataType: "json",
success:function(data){

},error:function(data){

}
});

方法二:使用beforeSend方法设置请求头

$.ajax({
type: "POST",
url: "/index",
data: JSON.stringify(mytable.params),
contentType: "application/json",
dataType: "json",
beforeSend: function(request) {
request.setRequestHeader("Authorization", token);
},
success: function(data) {

},
error: function(data) {

}
});

---------------------
作者:qq_32784541
来源:CSDN
原文:https://blog.csdn.net/qq_32784541/article/details/79655146
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/aslxwjh/p/10294280.html

时间: 2024-10-20 15:03:30

token的作用及实现原理的相关文章

应用中Token的作用

Token 的作用 Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交. 2)anti csrf攻击(跨站点请求伪造). 两者在原理上都是通过session token来实现的.当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中,然后将Token发给客户端(一般通过构造hidden表单).下次客户端提交请求时,Token会随

Memcached概念、作用、运行原理、特性、不足简单梳理(1)

http://www.cnblogs.com/yinrq/p/5013742.html Memcached概念.作用.运行原理.特性.不足简单梳理(1) 大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过.这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸. Memcached概念.作用.运行原理.特性.不足简单梳理(1) Memcached下载安装.NET

GRANT命令的作用及其工作原理

管理一个MYSQL数据库,那么准确地理解GRANT命令的作用及其工作原理是非常有意义的. 想了解如何创建用户,以及使用GRANT命令实现用户权限的授予:如果要管理一个MYSQL数据库,那么准确地理解GRANT命令的作用及其工作原理是非常有意义的. 当执行一条GRANT语句的时候,它会影响一个名为mysql的特殊数据库.权限信息就是保存在这个数据库的6个表中.这样,当对数据库授予权限的时候,就应该注意是否授予了访问mysql数据库的访问权限. 以管理员身份登录的,输入如下命令,我们就可以看到mys

boost库----share_from_this类的作用和实现原理

使用boost库时,经常会看到如下的类 class A:public enable_share_from_this<A> 在什么情况下要使类A继承enable_share_from_this? 使用场合:当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr. 我们就使类A继承enable_share_from_this,然后通过其成员函数share_from_this()返回当指向自身的share_ptr. 以上

token的作用以及ajax中传递token的几种方法

目录 1.ajax中传递token的作用 2.ajax中传递token的几种方法 内容 1.ajax中传递token的作用 作用一:防止表单重复提交 主要原理是:用户提交表单后,会携带token到服务器,服务器将session中的token和用户请求带过来的token进行比较,如果相同,会将session中的token进行更新.若用户重复提交,则用户之后发过来的请求的token和服务器session中的token是不一致的,所以会导致之后的表单提交操作失败. 作用二:防止anti csrf 攻击

Handler的作用以及工作原理

在Android开发中经常会用到Handler,很入了解Handler的作用以及工作原理是很有必要的.废话不多说,下面我们开始进入正题. handler的作用: 同子线程协同工作,接收子线程发送过来的消息,通过发送过来的消息更新主线程(UI线程).我解释一下:当程序需要从服务器请求数据.执行下载任务或者是执行一些其他耗时操作的时候,我们就不能再主线程中进行了.如果你在主线程中执行的话,程序就会进入一个假死状态,如果时间超过5秒,就会报"force close(强制关闭)".这个时候,我

续流二极管作用及工作原理

续流二极管(flyback diode),有时也称为飞轮二极管或是snubber二极管,是一种配合电感性负载使用的二极管,当电感性负载的电流有突然的变化或减少时,电感二端会产生突波电压,可能会破坏其他元件.配合续流二极管时,其电流可以较平缓的变化,避免突波电压的发生. 续流二极管作用及工作原理续流二极管都是并联在线圈的两端,线圈在通过电流时,会在其两端产生感应电动势.当电流消失时,其感应电动势会对电路中的原件产生反向电压.当反向电压高于原件的反向击穿电压时,会把原件如三极管,等造成损坏.续流二极

token的作用

toke token的作用   使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 1. 客户端使用用户名跟密码请求登录. 2.通过ajax向后端发送请求. 3.服务端收到请求,去验证用户名与密码. 4.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端 5.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里 6.客户端每次向服务端请求资源的时候需要带着服务端签发的 To

实际业务说明token的作用,保证安全性

token是"令牌","代币"等一些说法,关于token的作用的说法也比较多,其实在token的使用中保证业务的安全性上具有不可忽略的作用,比如防止表单的重复提交,token的生成可以用session的随机id 原文地址:https://www.cnblogs.com/5454tfggg/p/12273229.html