我使用 localStorage.setItem('token', jwt);,来存放jwt令牌,怎么在前端用代码实现每次访问某一个页面时都带有jwt令牌,这样可以被springboot后端的拦截器拦截,获取每次请求头中的jwt令牌,,整体的代码和请求要怎么写,分别放在那些文件里
时间: 2023-08-04 08:20:31 浏览: 114
jwt:Jwt.Net,.NET的JWT(JSON Web令牌)实现
要在前端的每次访问某一个页面时都携带JWT令牌,可以在路由导航守卫中设置。具体代码实现如下:
1. 在路由导航守卫中获取JWT令牌:
```javascript
const token = localStorage.getItem('token');
```
2. 在需要携带JWT令牌的路由中设置meta字段:
```javascript
{
path: '/profile',
name: 'Profile',
component: Profile,
meta: {
requireAuth: true
}
}
```
3. 在路由导航守卫中判断是否需要携带JWT令牌:
```javascript
router.beforeEach((to, from, next) => {
const token = localStorage.getItem('token');
if (to.meta.requireAuth && !token) {
// 如果需要携带JWT令牌但是不存在,则跳转到登录页面
next({
path: '/login',
query: { redirect: to.fullPath }
});
} else {
// 否则继续访问该页面
next();
}
});
```
4. 完整的代码实现如下:
在router/index.js中:
```javascript
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/views/Home.vue';
import Login from '@/views/Login.vue';
import Profile from '@/views/Profile.vue';
Vue.use(Router);
const router = new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/profile',
name: 'Profile',
component: Profile,
meta: {
requireAuth: true // 需要携带JWT令牌
}
}
]
});
router.beforeEach((to, from, next) => {
const token = localStorage.getItem('token');
if (to.meta.requireAuth && !token) {
// 如果需要携带JWT令牌但是不存在,则跳转到登录页面
next({
path: '/login',
query: { redirect: to.fullPath }
});
} else {
// 否则继续访问该页面
next();
}
});
export default router;
```
在main.js中引入router:
```javascript
import Vue from 'vue';
import App from './App.vue';
import router from './router';
Vue.config.productionTip = false;
new Vue({
router,
render: h => h(App),
}).$mount('#app');
```
这样,在访问需要携带JWT令牌的页面时,会自动携带JWT令牌。在后端可以通过拦截器获取请求头中的JWT令牌,在Spring Security中可以使用如下代码获取:
```java
String token = request.getHeader("Authorization").replace("Bearer ", "");
```
阅读全文