我的前端工具集(六)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控件 ...
随机推荐
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:unpack (unpack) on project sq-integral-web: Unable to find artifact.
1.问题描述 项目maven打包报上述错误, 但是小伙伴运行好使. 2.问题解决 是idea工程编码(gbk)和项目编码(utf-8)不一致 idea->file->Other Setti ...
- OpenLayers介绍和第一个例子(转载)
什么是OpenLayers? 作者:田念明出处:http://www.cnblogs.com/nianming/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...
- IIFE
一.IIFE IIFE:immediately-invoked function expression,即时调用函数表达式. 如果一个函数,在定义的时候,就想直接调用它,就是一个IIFE. 函数执行方 ...
- MFC string char cstring 类型转换
在Unicode环境下用以下转换: CString z_strCurtTime = _T(""); // 获取当前时间 CTime z_tCurTime = CTime::GetC ...
- css best practice for big team and project
推荐查看以下文章: https://segmentfault.com/a/1190000000704006 关于BEM,SMACSS,OOCSS的通俗易懂的介绍 http://philipwalton ...
- 故障排除:无法启动、访问或连接到 Azure 虚拟机上运行的应用程序
有多种原因可导致无法启用或连接到在 Azure 虚拟机 (VM) 上运行的应用程序.原因包括应用程序未在预期端口上运行或侦听.侦听端口受到阻止,或网络规则未将流量正确传递到应用程序.本文说明有条理地找 ...
- SQL Server ->> 斐波那契数列(Fibonacci sequence)
斐波那契数列(Fibonacci sequence)的T-SQL实现 ;WITH T AS ( AS BIGINT) AS curr, CAST(NULL AS BIGINT) AS prv UNIO ...
- jdbc 块提取方式
最近使用jdbc方式查询数据,保存为csv文件中.当然你可以在pl/sql中直接查出来,copy to excel就好了.但我想通过程序实现 1 @Test 2 public void test() ...
- 关于微信公账号H5 API 调用的坑 BUG
页面A已经配置过,如果是单页面跳转,则页面B可以共享当前的SDK配置(至少菜单是这样的) 刷新页面,原先的菜单仍然会保持原样,只是调用SDK已经失效了,需要重新配置,重新配置后,菜单仍然会保持原样(如 ...
- 关于 Windows 7 语言包
在对IE浏览器进行多语言对应的时候,网页会检测当前系统的语言,来判断网页需要以哪种语言显示.但是,在给系统安装指定语言包时,可能会遇到安装失败的情况,原因就是需要在你的电脑上安装必需的基本语言包.请看 ...