cookie保存后端传来的token值,请求每一个接口header都带上token值

一、后端拦截器,实现每个请求都需要token,没有就要进行拦截

/**
 * 自定义拦截器
 */
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
	@SneakyThrows
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		/*// 设置返回为json格式,使用UTF-8(这部分有问题)
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");*/
		//获取请求头的token
		String token = request.getHeader("token");
		System.out.println("拦截器生成的token是"+token);
		if(token==null){
			throw new ScoreException(400, "token不能为空");
		}
		//在jwt里面验证是否为有效的token
		boolean b = JwtTokenUtil.checkToken(token);
		if(!b){
			throw new ScoreException(400, "token没有效");
		}else{
			return true;
		}

	}
}

二、配置拦截器

package com.lza.scoresys.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * 配置拦截器
 */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
	@Autowired
	private AuthenticationInterceptor interceptor;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(interceptor)
				.addPathPatterns("/**").excludePathPatterns("/login/**")//放行登陆路径
				.excludePathPatterns("/doc.html/**")
				.excludePathPatterns("swagger/**")
				.excludePathPatterns("/swagger-ui.html")
				.excludePathPatterns("swagger-ui.html")
				.excludePathPatterns("/webjars/**")
				.excludePathPatterns("/swagger-ui.html/*")
				.excludePathPatterns("/swagger-resources")
				.excludePathPatterns("/swagger-resources/**")
				.excludePathPatterns("/v2/**")
				.excludePathPatterns("/employee/**");//放行员工
				//.excludePathPatterns("/student/**");
	}
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		//本应用的所有方法都会去处理跨域请求
		registry.addMapping("/**")
				//允许远端访问的域名
				.allowedOrigins("http://localhost:8080")
				//允许请求的方法("POST", "GET", "PUT", "OPTIONS", "DELETE")
				.allowedMethods("*")
				//允许请求头
				.allowedHeaders("*");

	}
}

三、前端vue引入cookie cnpm install js-cookie

/*//引入cnpm install js-cookie*/
    import cookie from 'js-cookie';

在这里插入图片描述

四、登陆成功后,把后端接口返回的token保存在cookie上

 methods: {
      handleSubmit(who)
      {
        if (who == 1) {
          instance.post('/login/studentLogin',{
              username: this.ruleForm2.username,
              password: this.ruleForm2.password
            }).then(res => {
            console.log(res.data);
            if (res.data.code == 200) {
              alert("登陆成功,返回token是" + res.data.data.token);
              //把token字符串放在cookie里面(第一个参数cookie名称,第二个名称参数值,第三个参数作用范围)
              cookie.set('token', res.data.data.token,{domain:'localhost'});
              this.$router.push({name:'Student'})//跳转到学生路由
            } else {
              alert(res.data.message)
            }
          })

在这里插入图片描述
五:前端拦截器

import axios from "axios";
import cookie from 'js-cookie';
//创建默认实列
const instance=axios.create({
  baseURL:'http://localhost:8084',
  timeout:5000,
});
//拦截器
instance.interceptors.request.use(config=> {
  if (cookie.get('token')) {
    //把获取cookie值放到header里面
    config.headers['token'] = cookie.get('token');
  }
  return config;
},
  error => {
  return Promise.reject(error)
})

//暴露实例出去
export default instance;

在这里插入图片描述
六:运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 前端用户登录后每个请求都带有 token 的做法是使用了 token 认证机制。 一般情况下,在用户登录时,服务器会向前端返回一个 token,并将该 token 存储在前端cookie、localStorage 或者 sessionStorage 中。之后,在前端发送请求时,会将这个 token 作为请求头的一部分发送给服务器,服务器收到请求后,会对 token 进行校验,来判断用户是否已经登录。 如果校验通过,则允许用户访问请求的资源;如果校验失败,则拒绝用户的访问。 这种方式的优点是,在登录状态下,用户无需再次输入用户名和密码,可以方便地在多个页面或应用之间切换;同时,这种方式也比较安全,因为 token 一般都是使用加密算法生成的,很难被恶意破解。 ### 回答2: 前端用户登录后每个请求都带有token是通过以下步骤实现的: 1. 用户登录:用户在前端页面输入用户名和密码,并点击登录按钮。前端将用户名和密码发送到后端进行验证。 2. 后端验证:后端接收到用户名和密码后,对其进行验证。如果验证成功,后端会生成一个唯一的token并将它存储在服务器端,并将token返回给前端作为登录成功的标识。 3. 前端存储token前端接收到后端返回的token后,可以将token存储在本地,通常使用浏览器的localStorage或sessionStorage进行存储。 4. 后续请求带上token:用户在登录成功后,每次发送请求时,在请求的头部中附带上存储的token。可以通过设置请求头的Authorization字段来传递token。 5. 后端验证token后端在接收到请求时,会从请求头中获取token,并进行验证。验证的过程可以是通过检查token是否有效、是否过期、是否与登录的用户匹配等方式来进行。如果验证成功,则继续进行请求所需要的操作;如果验证失败,则返回错误信息,要求用户重新登录。 6. 安全性控制:为了增加安全性,可以使用一些安全措施来提升token的安全性,如设置token的有效期、定期更换token、使用https等。 通过上述步骤,前端用户登录后每个请求都能够携带token进行验证,确保只有登录用户才能进行操作,并且能够提高系统的安全性。 ### 回答3: 前端用户登录后每个请求都带有token的实现方式可以通过以下步骤来完成: 1. 用户登录:用户在前端界面输入用户名和密码进行登录,在前后端分离的架构中,通常会使用RESTful API进行登录验证。用户输入的登录信息会通过API发送到后端服务器。 2. 后端验证:后端服务器接收到用户发送的登录信息后,会对用户提供的用户名和密码进行验证。如果验证成功,服务器会生成一个唯一的token,并将其存储在服务器端。 3. token返回:后端服务器将生成的token返回给前端界面,以便用户在之后的请求中使用。这个token可以通过HTTP响应的头部、JSON响应体等方式返回给前端。 4. 前端存储token前端接收到token后,会将其存储在某个地方,通常是浏览器的本地存储(如localStorage或cookie)中。在每个请求中,前端会从本地存储中获取token,并将其附加到请求header中,作为认证的凭证。 5. 请求带有token:当用户进行其他请求时,前端会在请求header中添加一个"Authorization"字段,token。这样,后端服务器在接收到请求后,可以从header中获取到token进行验证,以确定请求是否来自合法的登录用户。 6. 后端验证token后端服务器在接收到请求后,会从请求header中提取出token,并与服务器端存储的token进行比较验证。如果验证成功,服务器会继续处理请求;如果验证失败,服务器会返回错误信息,要求用户重新进行登录。 通过以上步骤,前端用户登录后每个请求都带有token就可以实现了。前端在发起请求时,会自动带上token作为请求的认证凭证,后端在接收到请求后可以根据该token验证用户的身份和权限。这样可以增强系统的安全性和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值