前言:在进行中后台开发的时候,发现一些小问题,就是在用户已经登录,本地浏览器存入token的情况下,用户如果之间跳转到登录/login的路由,这时候是需要判断当前用户的token状态是否过期,如果过期了就停留在登录页面(login路由),如果没有过期,就跳转到首页的路由
实现的方法
前端我是设置了一个路由监听,如果当前的路由是Login,调用后端方法进行token的期限判断,如果没有过期就跳转到首页
路由监听
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| router.beforeEach((to , from , next) =>{ const { setRouteName } = useState() localStorage.setItem('currentRouteName', to.name as string) setRouteName()
if(to.name === 'Login'){ const token = localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user') as string).token : '' isExpiration(token).then(res =>{ if(res.data){ next("/home/dashBoard") } }) }
else if (!to.matched.length) { const storeMenus = localStorage.getItem("menus") if (storeMenus) { next("/404") } else { next("/login") } }
else{ next() }
})
|
后端token过期验证
auth0 JWT库具有用于分析和(可选)验证令牌的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public static Boolean isExpiration(String token){ DecodedJWT jwt = JWT.decode(token); if( jwt.getExpiresAt().before(new Date())) { System.out.println("token is expired"); return false; }else { return true; } }
|
验证token是否正确
这个可加也可不加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public static Boolean isToken(String token, String userId ,String sign) { try { Algorithm algorithm = Algorithm.HMAC256(sign); JWTVerifier verifier = JWT.require(algorithm).withAudience(userId).build(); DecodedJWT jwt = verifier.verify(token); return true; } catch (Exception exception) { return false; } }
|