当前位置:   article > 正文

原生axios携带请求头方式获取页面信息,基于自己的代码_axios获取windows message

axios获取windows message

通过在前端页面中,配置原生请求头方式,设置每次发送的axios请求携带对应的请求头,以此可以获取对应的页面内容。

前端 : rbac-manage

后端代码:rbac-manage

  1. //后端的拦截器无法拦截原生axios模式发送请求时未携带请求头的条件
  2. @Override
  3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  4. //获取请求头约定key值
  5. String token = request.getHeader("User-Token");
  6. //判断当前token是否为空,必须借助Spring官方字符串工具类StringUtils判断
  7. //一定不能直接token.isEmpty()
  8. if(StringUtils.isEmpty(token)){
  9. //todo 从redis缓存中,取出当前登录用户的token进行校验
  10. //未认证,返回提示JSON
  11. //引入FastJson的依赖,调用对应方法实现JSON转换(JSONObject.toJSONString(java对象或数组数据))
  12. String jsonString = JSONObject.toJSONString(Result.error("未认证,请登录!"));
  13. //设置响应内容类型,解决中文乱码
  14. response.setContentType("application/json");
  15. response.setCharacterEncoding("utf-8");
  16. //返回JSON消息
  17. response.getWriter().write(jsonString);
  18. //阻止Controller方法执行
  19. return false;
  20. }
  21. //放行请求
  22. return true;
  23. }
  1. // 原生的axios设置默认的请求头,保存token
  2. axios.defaults.headers['User-Token'] = `Bearer ${getToken()}`;

         因为后端对请求头中保存的token的校验问题,所以前端只要设置了同名token即可操作页面。

  1. //获取请求头约定key值
  2. String token = request.getHeader("User-Token");
  3. //判断当前token是否为空,使用Spring官方字符串工具类StringUtils判断
  4. //如果直接token.isEmpty(),底层只做了简单的字符串长度校验,没做空字符串校验
  5. /*问题也出现在此,由于只做了非空校验,并未对token的值做判断,所有前端只要设置了同名token
  6. 就可以访问页面操作数据
  7. */
  8. if(StringUtils.isEmpty(token)){
  9. //未认证,返回提示JSON
  10. String jsonString = JSONObject.toJSONString(Result.error("未认证,请登录!"));
  11. //设置响应内容类型,解决中文乱码
  12. response.setContentType("application/json");
  13. response.setCharacterEncoding("utf-8");
  14. //返回JSON消息
  15. response.getWriter().write(jsonString);
  16. //阻止Controller方法执行
  17. return false;
  18. }
  19. //放行请求
  20. return true;

 前端任意设置的token:

User-Token : barer}

 实际保存的token:

User-Token : e2e9184873b9442d945dddc0dd08a33b

        前端想要获取到保存的token需要在,前端页面中配置axios的时候,获取设置在sessionStorage中的token。

  1. import axios from 'axios'
  2. import {getToken} from "@/utils/auth";
  3. //设置统一前端地址
  4. axios.defaults.baseURL = '/dev';//注意使用配置的代理拦截地址作为前缀(解决跨域请求问题)
  5. // 从设置的sessionStorage中获取设置的token
  6. let token = window.sessionStorage.getItem("token")
  7. // 为axios请求设置请求头,请求头和本次登录设置请求头token一致
  8. axios.defaults.headers['User-Token'] = `${token}`;

        这样就可以正常获取token,并且成功访问页面。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/429457
推荐阅读
相关标签
  

闽ICP备14008679号