我的前端工具集(六)Ajax封装token
我的前端工具集(六)Ajax封装token
liuyuhang原创,未经允许禁止转载
在单点登陆中,或登陆验证后,不应该每次都验证用户名和密码,
也不应该将用户名密码存入cookie中(虽然很多都这么做)
token作为一种验证策略,实现起来比较简单,也可以找一些单点登陆的框架,或者token解决方案。
本文工具使用REST风格,将ajax经过简单封装,使得所有使用此封装后的ajax都默认进行token验证。
1、封装的ajax代码
/**
* 封装ajax代码
*/
var local = window.location.protocol + "//" + window.location.host + "/";
function ajaxWithToken(url, data, success, error, other) {
$.ajax({
type : 'POST',
url : local + url + "?token=" + token,
data : data,
async : true,
success : function(resultMap) {
console.log(resultMap)
if (resultMap.status != true) {
console.log("返回登陆页面的重定向代码")
} else {
success(resultMap); //调用自定义的success
}
},
error : error, //调用自定义的error
});
if (null != other & '' != other & 'undefinde' != typeof other) {
eval(other); //尾部执行的其他代码
}
}
2、测试html代码
<div style="padding:10px">
<h2>This is a page to test Token.</h2>
<div id="token" style="padding:5px"></div>
<br>
<div class="col-lg-3" style="margin-top:20px">
<button type="button" class="btn btn-default" onclick="testToken()">测试token</button>
</div>
</div>
3、测试调用封装的ajax代码
window.token = '';
function testToken() {
ajaxWithToken(
'login',
'',
function(resultMap) {
console.log(resultMap.token)
window.token = resultMap.token; //将获取的token写入全局变量
$("#token").html(window.token);
},
function(resultMap) {
console.log(resultMap)
}
);
}
4、后台代码
使用的springboot-controller
@RestController // 等同于responseBody + controller双重注解
public class HelloExample {
/**
* 假设首次登陆成功,返回token作为全局变量备用.
* 之后每次都验证token 本代码应该写在拦截器中,作为登陆拦截发放token使用.
* @param request
* @return
*/
@RequestMapping("/login")
public Map<String, Object> login(HttpServletRequest request) {
Map<String, Object> resultMap = new HashMap<String, Object>();// 定义结果集
HttpSession session = request.getSession();
String checkToken = request.getParameter("token");// 获取url中的token
String token = (String) session.getAttribute("token");// 获取session中的token
// 严重token
if (!checkToken.equals(token)) {// token验证未通过
// 应先返回登陆页面,重新登陆
// 或token验证未通过但登陆通过,发放token
// 确保token只发放一次,session过期,就需要重新登陆
// 在tomcat连接池中定义session过期时间,默认30min
token = UUID.randomUUID().toString();// 首次访问定义token
session.setAttribute("token", token);// 储存token到session,若为集群应存入集群中,实现单点登陆
}
resultMap.put("token", token);
resultMap.put("status", true);//验证token是否通过后,以此确定是否让前端页面重定向到登陆页面
System.out.println(resultMap);
return resultMap;
}
}
5、测试图例
前端

后端

根据实际需要自己更改工具吧!
以上!
我的前端工具集(六)Ajax封装token的更多相关文章
- 我的前端工具集(七)div背景网格
我的前端工具集(七)div背景网格 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候总觉得div颜色过于白,于是给了10%的灰 但是并不一定能解决问题,因为页面中会有不均衡的 ...
- 我的前端工具集(八)获得html元素在页面中的位置
我的前端工具集(八)获得html元素在页面中的位置 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...
- 都2022年了,你的前端工具集应该有vueuse
摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- drf二次封装response-APIViews视图家族-视图工具集-工具视图-路由组件
视图类传递参数给序列化类 (1).在视图类中实例化 序列化对象时,可以设置context内容. (2).在序列化类中的局部钩子.全局钩子.create.update方法中,都可以用self.conte ...
- 前端好的工具集推荐 lodash
原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...
- Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集
前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...
- 界面开发工具集Telerik UI for ASP.NET AJAX发布R2 2019
Telerik UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半.Te ...
- 添加ASP.NET AJAX控件工具集到VS2010的方法
在VS2010中Ajax控件只有5个,其实还有很多支持AJAX特定功能的服务器控件,微软是将这些控件当作开放源代码项目.所以没有集成到VS2010中.这些AJAX控件被称为ASP.NET AJAX控件 ...
随机推荐
- 52张扑克牌快速生成js
function* generatePoker() { const points = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']; yield* ...
- canvas画布基础知识
<canvas> </canvas>标签用于绘制图像(通过脚本,通常是 JavaScript). <canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - ...
- TextSwitcher(文本切换器)和ViewFlipper
1.TextSwitcher 使用: 应用分为三步: 1.得到 TextSwitcher 实例对象 TextSwitcher switcher = (TextSwitcher) findViewB ...
- 关于Flume以及Kafka理解
- SQL点点滴滴_查询类型和索引-转载
当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型. 表中的示例基于 AdventureWorks2008R2 示例数据库, 在 SQL Server Ma ...
- iptables:no config file
防火墙规则默认都是在/etc/sysconfig/iptables这个文件中的 出现这个问题,是因为在/etc/sysconfig/目录下没有找到iptables这个文件 可以使用service ip ...
- HDU ACM 2895-Edit distance
Edit distance Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- 设置dedecms标签 [field:global.autoindex/] 初始值{class递增}
在{dede:arclist/}这个标签中有个[field:global.autoindex/],是从0开始自增,如果我们想自定义一个数值,比如自定义从2开始.那么就可以写成下面代码: [field: ...
- antd Grid
import { Row, Col } from 'antd'; <Row type="flex" //内容布局(左靠齐,右靠齐,居中) justify="star ...
- jQuery ajax从后台取不到数据
ajax post data 获取不到数据,注意 content-type的设置 .post/get 关于 jQuery data 传递数据.网上各种获取不到数据,乱码之类的. 好吧今天我也遇到了 ...