JsonWebToken工具token认证---前后端结合使用思路
JsonWebToken工具结合切面token实现认证---前后端结合使用思路:
前后加工不一样用于安全混淆
后端工具生成:eyJhbGciOiJIUzUxMiJ9.eyJ0b2tlbl9jcmVhdGVfdGltZSI6MTU3MTk2Mzg5OTMwOCwic3ViIjoicm9vdCIsInRva2VuX3VzZXJfbmFtZSI6InJvb3QiLCJleHAiOjE1NzE5NjU2OTksInRva2VuX3VzZXJfcGFzc3dvcmQiOiIkMmEkMTAkbDZmTG04NnlPazcub3ByUVhMNlNmdUtRTHp0OGR0UVZtYi95QU0zVWN5b1Vvd2I4LnFOVXkifQ.sQR2JluCpm5GrNKSBDLf2k2DR89mP657rSPfj7G7784JDxkf7iJiKvduBiYZySBgJ1ygxDanoGhB3nFXkQFkfg
前面拼接:Bearer eyJhbGciOiJIUzUxMiJ9.eyJ0b2tlbl9jcmVhdGVfdGltZSI6MTU3MTk2Mzg4Mzg2Mywic3ViIjoicm9vdCIsInRva2VuX3VzZXJfbmFtZSI6InJvb3QiLCJleHAiOjE1NzE5NjU2ODMsInRva2VuX3VzZXJfcGFzc3dvcmQiOiIkMmEkMTAkbDZmTG04NnlPazcub3ByUVhMNlNmdUtRTHp0OGR0UVZtYi95QU0zVWN5b1Vvd2I4LnFOVXkifQ.ipUFgzMF_clkeks5cZUO82pmSE1M4yj_UwFQo66qJA9JH_8HZqLMyMvrfsiXa_bneXKTiKK92mYQU4qzKqaaww
1,每次刷新token都是重新生成token-不含bearer
返回的header中的token不含bearer--工具类直接生成的
2,后端工具类直接生成的token没有前缀 返回给前端
Authorization才有前缀
3,String token = request.getHeader(Constants.TOKEN_HEADER_STRING); 前端把后端传递的没有前缀的token加上前缀,前端传过来的才有前缀
后端根据前端传过来的有前缀的反解成claim---最终那用里面的用户名,密码(map中设置),有效期(Claime中设置)等
private Claims getClaims(String token) {
Claims claims;
try {
claims = Jwts.parser()
.setSigningKey(SECRET.getBytes("UTF-8"))
.parseClaimsJws(token.startsWith(Consts.TOKEN_PREFIX) ?====================设置好了去除前缀的地方
token.substring(token.indexOf(Consts.TOKEN_PREFIX) + Consts.TOKEN_PREFIX.length()).trim() :
token.trim())
.getBody();
} catch (Exception e) {
log.warn(e.getMessage());
claims = Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token.startsWith(Consts.TOKEN_PREFIX) ?
token.substring(token.indexOf(Consts.TOKEN_PREFIX) + Consts.TOKEN_PREFIX.length()).trim() :
token.trim())
.getBody();
}
return claims;
}