700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > vue的axios拦截器实现未登录页面跳转

vue的axios拦截器实现未登录页面跳转

时间:2021-12-06 20:00:07

相关推荐

vue的axios拦截器实现未登录页面跳转

1.拦截器分为request请求拦截器和response响应拦截器

PS:request请求拦截器:发送请求前统一处理,如:设置请求头headers、应用的版本号、终端类型等。

response响应拦截器:有时候我们要根据响应的状态码来进行下一步操作,例如:由于当前的token过期,接口返回401未授权,那我们就要进行重新登录的操作。

2.main.js文件中(先安装axios)

import axios from 'axios'// 给Vue函数添加一个原型属性$axios指向axios(全局使用axios)// vue实例中直接用this.$axios就可以执行axios方法Vue.prototype.$axios=axios

3.http request 请求拦截器

PS:发送请求之前判断是否存在token,除了登录页,其他页面请求头headers都添加token

// http request 请求拦截器axios.interceptors.request.use(config => {// 在发送请求之前做些什么let pathname = location.pathname;if(localStorage.getItem('token')){if(pathname != '/' && pathname != '/login'){mon['token'] = localStorage.getItem('token');}}return config;}, error => {// 对请求错误做些什么return Promise.reject(error);});

4.http response 响应拦截器

PS:若返回401,页面跳转到登录页面

// http response 响应拦截器axios.interceptors.response.use(response => {return response;},error => {if (error.response) {switch (error.response.status) {// 返回401,清除token信息并跳转到登录页面case 401:localStorage.removeItem('token');router.replace({path: '/login'//登录成功后跳入浏览的当前页面// query: {redirect: router.currentRoute.fullPath}})}// 返回接口返回的错误信息return Promise.reject(error.response.data);}});

springboot设置拦截器

package com.mon.interceptor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;@Configurationpublic class InterceptorConfig extends WebMvcConfigurationSupport {@Autowiredprivate LoginInterceptor loginInterceptor;@Overrideprotected void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// addPathPatterns 用于添加拦截规则,/**表示拦截所有请求// excludePathPatterns 用户排除拦截registry.addInterceptor(loginInterceptor).addPathPatterns("/**");// .excludePathPatterns("/stuInfo/getAllStuInfoA","/account/register"); super.addInterceptors(registry);}}

package com.mon.interceptor;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.ponent;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import com.mon.Constants;@Componentpublic class LoginInterceptor implements HandlerInterceptor {private static Logger log = LoggerFactory.getLogger(LoginInterceptor.class);@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {// TODO Auto-generated method stub}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {// TODO Auto-generated method stub}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {//获取请求的URLString url = request.getRequestURI();log.info("请求url:" + url);//URL:除了登陆的请求,其余都拦截if (url != null && url.contains("/login")) {return true;}//判断是否已登录if(request.getSession().getAttribute(Constants.USER_SESSION) != null){return true;}response.setContentType("text/html;charset=UTF-8");ServletOutputStream out = response.getOutputStream();out.write("未授权访问,请登录账号".getBytes("UTF-8"));response.setStatus(999);out.flush();out.close();return false;}}

原文链接:/weixin_39378691/article/details/83750056

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。