编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

vue-admin-template请求访问springboot后端时携带token

wxchong 2024-10-02 02:35:23 开源技术 13 ℃ 0 评论

1.vue-admin-template中已经设置了cookies方法保存和删除cookie

@/utils/auth.

import Cookies from 'js-cookie'

const TokenKey = 'vue_admin_template_token'

export function getToken() {

return Cookies.get(TokenKey)

}

export function setToken(token) {

return Cookies.set(TokenKey, token)

}

export function removeToken() {

return Cookies.remove(TokenKey)

}

2.@/api/user设置request请求

import request from '@/utils/request'


export function login(data) {

return request({

url: '/employee/login',

method: 'post',

data

})

}

3.@/store/user设置登陆方法

import { getToken, setToken, removeToken } from '@/utils/auth'

import { login } from '@/api/user'

const state = {

token: getToken()

}

const mutations = {

setToken(state, token) {

state.token = token

// 同步到缓存

setToken(token)

},

removeToken() {

// 删除vuex的token

state.token = null

removeToken()

}

}

const actions = {

async login(context, data) {

console.log(data)

// 调用登陆接口,返回一个token

const token = await login(data)

console.log('login-token,', token)

context.commit('setToken', token.token)

console.log(state.token)

}

}


export default {

namespaced: true, // 开启命名空间

state,

mutations,

actions

}

4.登陆界面调用登陆方法

@/views/login

import { getToken, setToken, removeToken } from '@/utils/auth'

import { login } from '@/api/user'

const state = {

token: getToken()

}

const mutations = {

setToken(state, token) {

state.token = token

// 同步到缓存

setToken(token)

},

removeToken() {

// 删除vuex的token

state.token = null

removeToken()

}

}

const actions = {

async login(context, data) {

console.log(data)

// 调用登陆接口,返回一个token

const token = await login(data)

console.log('login-token,', token)

context.commit('setToken', token.token)


console.log(state.token)

}

}


export default {

namespaced: true, // 开启命名空间

state,

mutations,

actions

}

4.后端拦截器验证前端请求,否则返回401

package com.sky.interceptor;

import com.sky.constant.JwtClaimsConstant;
import com.sky.properties.JwtProperties;
import com.sky.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;

/**
 * jwt令牌校验的拦截器
 */
@Component
@Slf4j
public class JwtTokenAdminInterceptor implements HandlerInterceptor {

    @Autowired
    private JwtProperties jwtProperties;

    /**
     * 校验jwt
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判断当前拦截到的是Controller的方法还是其他资源
        if (!(handler instanceof HandlerMethod)) {
            //当前拦截到的不是动态方法,直接放行
            return true;
        }

        //1、从请求头中获取令牌
        log.info("登陆请求头");
        // 遍历并打印所有头部信息
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            log.info("Header Name: " + name);

            String value = request.getHeader(name);
            log.info("Header Value: " + value);
        }
        log.info("------");
        String token = request.getHeader(jwtProperties.getAdminTokenName());
        token = token.replace("vue_admin_template_token=","");
      
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();

                System.out.println("Name2: " + name);
                System.out.println("Value2: " + value);
                if(name.contains("vue_admin_template_token"))
                {
                    token = value;
                    System.out.println("get token");
                }
            }
        } else {
            System.out.println("No cookies found.");
        }
        //2、校验令牌
        try {
            log.info("jwt校验:{}", token);
            Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
            Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());
            log.info("当前员工id:", empId);
            //3、通过,放行
            return true;
        } catch (Exception ex) {
            //4、不通过,响应401状态码
            response.setStatus(401);
            return false;
        }
    }
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表