第4讲引入JWT前后端交互

引入JWT前后端交互

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC
7519);
JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】

在这里插入图片描述
后端接口测试:

@RestController
@RequestMapping("/test")
public class TestController {
   

    @Autowired
    private SysUserService sysUserService;
    
    @GetMapping("/user/list")
    public R userList(@RequestHeader(required = false) String token){
   
        if(StringUtil.isNotEmpty(token)){
   
            Map<String,Object> resutMap=new HashMap<>();
            List<SysUser> userList = sysUserService.list();
            resutMap.put("userList",userList);
            return R.ok(resutMap);
        }else{
   
            return R.error(401,"没有权限访问");
        }


    }

    @GetMapping("/login")
    public R login(){
   
        String token= JwtUtils.genJwtToken("java1234");
        return R.ok().put("token",token);
    }
    
}

前端测试:

<template>

  <el-button type="primary" @click="handleLogin">测试登录</el-button>
  <el-button type="danger" @click="handleUserList">测试获取用户列表信息</el-button>

</template>
<script setup>
import requestUtil from '@/util/request'
import store from '@/store'

const handleLogin=async()=>{
   
  let result=await requestUtil.get("test/login");
  let data=result.data;
  if(data.code==200){
   
    const token=data.token;
    console.log("登录成功:token="+token);
    store.commit('SET_TOKEN',token);
  }else{
   
    console.log("登录出错!")
  }
}

const handleUserList=async ()=>{
   
  let result=await requestUtil.get("test/user/list");
  let data=result.data;
  if(data.code==200){
   
    const userList=data.userList;
    console.log("用户列表信息:userList="+userList);
  }else{
   
    console.log("出错!")
  }
}

</script>
<style>

</style>

跨越问题:

在这里插入图片描述

@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
   

    @Override
    public void addCorsMappings(CorsRegistry registry) {
   
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE","OPTIONS")
                .maxAge(3600);
    }

  
}

封装request.js

// 引入axios
import axios from 'axios';
import store from '@/store'

let baseUrl="http://localhost:80/";
// 创建axios实例
const httpService = axios.create({
   
    // url前缀-'http:xxx.xxx'
    // baseURL: process.env.BASE_API, // 需自定义
    baseURL:baseUrl,
    // 请求超时时间
    timeout: 3000 // 需自定义
});

//添加请求和响应拦截器
// 添加请求拦截器
httpService.interceptors.request.use(function (config) {
   
    // 在发送请求之前做些什么
    //config.headers.token=window.sessionStorage.getItem('token');
    console.log("store="+store.getters.GET_TOKEN)
    config.headers.token=store.getters.GET_TOKEN
    return config;
}, function (error) {
   
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
httpService.interceptors.response.use(function (response) {
   
    // 对响应数据做点什么
    return response;
}, function (error) {
   
    // 对响应错误做点什么
    return Promise.reject(error);
});

/*网络请求部分*/

/*
 *  get请求
 *  url:请求地址
 *  params:参数
 * */
export function get(url, params = {
   }) {
   
    return new Promise((resolve, reject) => {
   
        httpService({
   
            url: url,
            method: 'get',
            params: params
        }).then(response => {
   
            resolve(response);
        }).catch(error => {
   
            reject(error);
        });
    });
}

/*
 *  post请求
 *  url:请求地址
 *  params:参数
 * */
export function post(url, params = {
   }) {
   
    return new Promise((resolve, reject) => {
   
        httpService({
   
            url: url,
            method: 'post',
            data: params
        }).then(response => {
   
            console.log(response)
            resolve(response);
        }).catch(error => {
   
            console.log(error)
            reject(error);
        });
    });
}

/*
 *  文件上传
 *  url:请求地址
 *  params:参数
 * */
export function fileUpload(url, params = {
   }) {
   
    return new Promise((resolve, reject) => {
   
        httpService({
   
            url: url,
            method: 'post',
            data: params,
            headers: {
    'Content-Type': 'multipart/form-data' }
        }).then(response => {
   
            resolve(response);
        }).catch(error => {
   
            reject(error);
        });
    });
}

export function getServerUrl(){
   
    return baseUrl;
}

export default {
   
    get,
    post,
    fileUpload,
    getServerUrl
}

相关推荐

  1. Web前后交互

    2024-02-17 06:34:01       9 阅读
  2. 前后交互—数据库与身份认证

    2024-02-17 06:34:01       29 阅读
  3. Vue2 基础四前后交互

    2024-02-17 06:34:01       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 06:34:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 06:34:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 06:34:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 06:34:01       18 阅读

热门阅读

  1. edge浏览器关闭组织托管

    2024-02-17 06:34:01       35 阅读
  2. re:从0开始的CSS之旅 18. z-index

    2024-02-17 06:34:01       24 阅读
  3. Jenkins打包springboot项目到k8s

    2024-02-17 06:34:01       38 阅读
  4. leetcode77组合 剪枝条件详细解释

    2024-02-17 06:34:01       37 阅读
  5. 【无人机】PIXHAWK、PX4、APM区别

    2024-02-17 06:34:01       38 阅读
  6. 键盘快捷切换K线周期的设计与实现

    2024-02-17 06:34:01       37 阅读
  7. 设计模式之:状态模式(State Pattern)

    2024-02-17 06:34:01       32 阅读