利用layuiAdmin和layui Table根据HTTP状态码判断授权

本文阅读 4 分钟
首页 知识库 正文

layuiAdmin前后端分离项目中所有请求都必须在header中携带token进行鉴权,鉴权不通过时返回http401状态码重新登录,而layui提供的方法不能判断http状态码,所以将其进行改写

layuiAdmin有两种请求,一种是admin.req发起的ajax,这种请求配置拦截器后会自动携带token

另一种是table.render方式,需要手动带上headers头

1.admin.req 发起的请求
修改配置文件config.js ,开启拦截器

  1. layui.define(['laytpl', 'layer', 'element', 'util'], function(exports){
  2. exports('setter', {
  3. container: 'LAY_app' //容器ID
  4. ,base: layui.cache.base //记录layuiAdmin文件夹所在路径
  5. ,api: '##/' //api接口URL
  6. ,views: layui.cache.base + 'views/' //视图所在目录
  7. ,entry: 'index' //默认视图文件名
  8. ,engine: '.html' //视图文件后缀名
  9. ,pageTabs: false //是否开启页面选项卡功能。单页版不推荐开启
  10. ,name: 'layuiAdmin Pro'
  11. ,tableName: 'layuiAdmin' //本地存储表名
  12. ,MOD_NAME: 'admin' //模块事件名
  13. ,debug: true //是否开启调试模式。如开启,接口异常时会抛出异常 URL 等信息
  14. ,interceptor: true //是否开启未登入拦截
  15. //自定义请求字段
  16. ,request: {
  17. tokenName: 'AUTHORIZATION' //自动携带 token 的字段名。可设置 false 不携带。
  18. }
  19. //自定义响应字段
  20. ,response: {
  21. statusName: 'code' //数据状态的字段名称
  22. ,statusCode: {
  23. ok: 0 //数据状态一切正常的状态码
  24. ,logout: 401 //登录状态失效的状态码
  25. }
  26. ,msgName: 'msg' //状态信息的字段名称
  27. ,dataName: 'data' //数据详情的字段名称
  28. }
  29. //独立页面路由,可随意添加(无需写参数)
  30. ,indPage: [
  31. '/user/login' //登入页
  32. ,'/user/reg' //注册页
  33. ,'/user/forget' //找回密码
  34. ,'/template/tips/test' //独立页的一个测试 demo
  35. ]
  36. //扩展的第三方模块
  37. ,extend: [
  38. 'echarts', //echarts 核心包
  39. 'echartsTheme' //echarts 主题
  40. ]
  41. //主题配置
  42. ,theme: {
  43. //内置主题配色方案
  44. color: [{
  45. main: '#20222A' //主题色
  46. ,selected: '#009688' //选中色
  47. ,alias: 'default' //默认别名
  48. },{
  49. main: '#03152A'
  50. ,selected: '#3B91FF'
  51. ,alias: 'dark-blue' //藏蓝
  52. },{
  53. main: '#2E241B'
  54. ,selected: '#A48566'
  55. ,alias: 'coffee' //咖啡
  56. },{
  57. main: '#50314F'
  58. ,selected: '#7A4D7B'
  59. ,alias: 'purple-red' //紫红
  60. },{
  61. main: '#344058'
  62. ,logo: '#1E9FFF'
  63. ,selected: '#1E9FFF'
  64. ,alias: 'ocean' //海洋
  65. },{
  66. main: '#3A3D49'
  67. ,logo: '#2F9688'
  68. ,selected: '#5FB878'
  69. ,alias: 'green' //墨绿
  70. },{
  71. main: '#20222A'
  72. ,logo: '#F78400'
  73. ,selected: '#F78400'
  74. ,alias: 'red' //橙色
  75. },{
  76. main: '#28333E'
  77. ,logo: '#AA3130'
  78. ,selected: '#AA3130'
  79. ,alias: 'fashion-red' //时尚红
  80. },{
  81. main: '#24262F'
  82. ,logo: '#3A3D49'
  83. ,selected: '#009688'
  84. ,alias: 'classic-black' //经典黑
  85. },{
  86. logo: '#226A62'
  87. ,header: '#2F9688'
  88. ,alias: 'green-header' //墨绿头
  89. },{
  90. main: '#344058'
  91. ,logo: '#0085E8'
  92. ,selected: '#1E9FFF'
  93. ,header: '#1E9FFF'
  94. ,alias: 'ocean-header' //海洋头
  95. },{
  96. header: '#393D49'
  97. ,alias: 'classic-black-header' //经典黑
  98. },{
  99. main: '#50314F'
  100. ,logo: '#50314F'
  101. ,selected: '#7A4D7B'
  102. ,header: '#50314F'
  103. ,alias: 'purple-red-header' //紫红头
  104. },{
  105. main: '#28333E'
  106. ,logo: '#28333E'
  107. ,selected: '#AA3130'
  108. ,header: '#AA3130'
  109. ,alias: 'fashion-red-header' //时尚红头
  110. },{
  111. main: '#28333E'
  112. ,logo: '#009688'
  113. ,selected: '#009688'
  114. ,header: '#009688'
  115. ,alias: 'green-header' //墨绿头
  116. }]
  117. //初始的颜色索引,对应上面的配色方案数组索引
  118. //如果本地已经有主题色记录,则以本地记录为优先,除非请求本地数据(localStorage)
  119. ,initColorIndex: 0
  120. }
  121. });
  122. });

修改view.js里的 view.req方法,判断http状态码等于401时跳转到登录页

  1. return $.ajax($.extend({
  2. type: 'get'
  3. ,dataType: 'json'
  4. ,success: function(res){
  5. var statusCode = response.statusCode;
  6. //只有 response 的 code 一切正常才执行 done
  7. if(res[response.statusName] == statusCode.ok) {
  8. typeof options.done === 'function' && options.done(res);
  9. }
  10. //登录状态失效,清除本地 access_token,并强制跳转到登入页
  11. // else if(res[response.statusName] == statusCode.logout){
  12. // view.exit();
  13. // }
  14. //其它异常
  15. else {
  16. var error = [
  17. '<cite>Error:</cite> ' + (res[response.msgName] || '返回状态码异常')
  18. ,debug()
  19. ].join('');
  20. view.error(error);
  21. }
  22. //只要 http 状态码正常,无论 response 的 code 是否正常都执行 success
  23. typeof success === 'function' && success(res);
  24. }
  25. ,error: function(e, code){
  26. /**
  27. * 判断http状态码
  28. */
  29. //登录状态失效,清除本地 access_token,并强制跳转到登入页
  30. if(e.status == response.statusCode.logout){
  31. view.exit();
  32. } else {
  33. var error = [
  34. '请求异常,请重试<br><cite>错误信息:</cite>'+ code
  35. ,debug()
  36. ].join('');
  37. view.error(error);
  38. typeof error === 'function' && error(res);
  39. }
  40. }
  41. }, options));
  42. };

请求示例

  1. //软删除
  2. function del(ids) {
  3. admin.req({
  4. url: layui.setter.api + 'm-slide'
  5. , type: 'patch'
  6. , data: {
  7. ids: ids
  8. }
  9. , done: function (result) {
  10. layer.msg(result.msg);
  11. }
  12. });
  13. }

2.table.render
在表格前使用

  1. layui.use(['admin', 'table', 'layer', 'form'], function () {
  2. var $ = layui.$
  3. , admin = layui.admin
  4. , view = layui.view
  5. , table = layui.table
  6. , form = layui.form;
  7. $.ajaxSetup({
  8. //完成请求后触发。即在success或error触发后触发
  9. complete: function (xhr, status) {
  10. if (xhr.status == 401)
  11. admin.exit();
  12. }
  13. })
  14. table.render({
  15. elem: '#LAY-app-content-list'
  16. , url: layui.setter.api + 'm-slide-list'
  17. ,toolbar: '#zq_toolbar' //开启头工具栏,此处default:显示默认图标,可以自定义模板,详见文档
  18. , title: '轮播图列表'
  19. , headers: {
  20. AUTHORIZATION: layui.data('layuiAdmin').AUTHORIZATION
  21. }
  22. , request: {
  23. pageName: 'page' //页码的参数名称,默认:page
  24. , limitName: 'size' //每页数据量的参数名,默认:limit
  25. }
  26. , parseData: function (res) { //res 即为原始返回的数据
  27. return {
  28. "code": res.code, //解析接口状态
  29. "msg": res.msg, //解析提示文本
  30. "data": res.data.data //解析数据列表
  31. };
  32. }
  33. , page: true
  34. , limit: 20
  35. , cols: [[
  36. { type: 'checkbox', fixed: 'left' }
  37. , { field: 'id', title: 'ID', width: 80, fixed: 'left', unresize: true, sort: true }
  38. , { field: 'name', title: '标题' }
  39. , { field: 'pic', title: '图形', width: 160, templet: '#pic', }
  40. , { field: 'url', title: '图片网址' }
  41. , { field: 'create_time', title: '创建时间', width: 200 }
  42. , { fixed: 'right', title: '操作', toolbar: '#test-table-toolbar-barDemo', width: 150 }
  43. ]]
  44. ,done:function(res,curr,count){
  45. hoverOpenImg();
  46. }
  47. });
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Centos7.9 Maven安装指南
« 上一篇 12-06
layuiAdmin (单页版)常见问题
下一篇 » 12-06

发表评论