token杂记,前后端分离

前端渲染的项目实现大概思路:

  1. 第一次登陆,前端请求后端登陆接口,发送用户名和密码;
  2. 后端验证用户名密码,成功则返回一个token;
  3. 前端拿到token,存到localStorage或sessionStorage,跳转页面;
  4. 前端设置路由守卫,除了login其他界面进去先判断是否有token,没有就回到login
  5. 前端axios请求拦截,在axios中配置请求数据前带上token;
  6. 后端验证请求,token有效则返回数据,无效返回401;
  7. 前端在axios响应拦截中判断状态码,401则清除token,回到登陆页面

常见问题记录:
一、前端如何请求带上token:
找到自己封装的axios,有个请求拦截器:

instance.interceptors.request.use(config =>{
         //一般从vuex,也可以从本地
        config.headers.token = localStorage.getItem('token')
        return config
    },err=>{
        console.log(err);
    })

二、后端如何获取前端的请求头:
通过 @RequestHeader(“token”)就可以把刚才的token拿到了,然后在自己进行校验。

@GetMapping("/getScreen")
ResponseEntity<String> getScreen(@RequestHeader("token") String token){
    
    return new ResponseEntity<>(token, HttpStatus.OK);
}

三、后端如何返回状态码:

直接使用状态码,类似与服务器返回的404,500一样,当我验证token失效时,直接返回401状态。在后端中具体可以这样:

@GetMapping("/hello") 
ResponseEntity<String> hello() { 
    return new ResponseEntity<>("Hello World!", HttpStatus.OK); 
}

这里HttpStatus.OK中的OK代表请求成功,这样写前端就会接受到“hello world”并且响应码是200。如果要返回401则
HttpStatus.UNAUTHORIZED 具体代码可以自己查响应码。
返回响应码的方式还有很多,这是其中一种

返回的状态在对象中,这种应该是最简单处理的,当获判断token无效时,返回自定义响应数据,响应码为200。这样前端拿到数据再去跳转登陆界面。

四、前端如何处理响应码:
当响应码是401的时候,请求是失败的,这时候可以在axios响应拦截器里面处理.

instance.interceptors.response.use(res =>{
        return res
    },err=>{
        if(err.response.status){
            switch (err.response.status){
                //token失效
                case 401:
                    alert('登陆失效,请重新登陆')
                    router.replace('/login').catch(() =>{})
            }
        }
    })

五、路由导航守卫:

router.beforeEach((to, from, next) => {
  //放行login
  if (to.path == '/login') return next()
  //没有token,全部劫持
  if(!localStorage.getItem("token")) return next('/login')
  //否则放行
  next()
})
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值