java token使用_token简单的使用

这里对token的简单的使用进行测试和描述

其原理就不在这里描述了!

具体测试流程:用户在前端请求登录——>在后台验证通过后根据用户ID生成token——>请求返回时将token带给前端并存在前端——>以后前端再次请求时需要带上token

——>后台接受到token并验证,如果验证通过,返回true,否则false(实际情况下就是验证通过,这次请求成功,否则这次请求无效)

1、数据库里面建立一个用户表,用于存储用户登录的账号和密码,用于用户登录测试

dd129ae8328441dd00b3d186623b07a3.png

2、后台生成token的代码类JavaWebToken(网上可以查到)

1 importio.jsonwebtoken.Jwts;2 importio.jsonwebtoken.SignatureAlgorithm;3 importorg.slf4j.Logger;4 importorg.slf4j.LoggerFactory;5

6 importjavax.crypto.spec.SecretKeySpec;7 importjavax.xml.bind.DatatypeConverter;8 importjava.security.Key;9 importjava.util.Map;10

11 public classJavaWebToken {12 private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);13

14 //该方法使用HS256算法和Secret:bankgl生成signKey

15 private staticKey getKeyInstance() {16 //We will sign our JavaWebToken with our ApiKey secret

17 SignatureAlgorithm signatureAlgorithm =SignatureAlgorithm.HS256;18 byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");19 Key signingKey = newSecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());20 returnsigningKey;21 }22

23 //使用HS256签名算法和生成的signingKey最终的Token,claims中是有效载荷

24 public static String createJavaWebToken(Mapclaims) {25 returnJwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact();26 }27

28 //解析Token,同时也能验证Token,当验证失败返回null

29 public static MapparserJavaWebToken(String jwt) {30 try{31 Map jwtClaims =

32 Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody();33 returnjwtClaims;34 } catch(Exception e) {35 log.error("json web token verify failed");36 return null;37 }38 }39 }

使用前需要导入依赖包,在项目的pom.xml文件中加入:

io.jsonwebtoken

jjwt

0.7.0

测试的控制层代码:

/*** 登录验证 login

*@paramrc 前端请求类(包含前端用户输入的账号和密码)

*@paramresponse

*@returnLoginInfo 用户信息类(包含用户的ID,账号和密码和生成token字符串信息)*/@RequestMapping(value= "/login")publicLoginInfo login(RequestClass rc, HttpServletResponse response){

response.setHeader("Access-Control-Allow-Origin","*");

UserInf userInf= ls.uerLogin(rc.getUserName(),rc.getPassWord()); //根据前端传送过来的账号和密码进行验证

if( userInf == null) //用户不存在,返回null

return null;

LoginInfo loginInfo= newLoginInfo();

Map m = new HashMap();

m.put("userId",userInf.getId());

String token= JavaWebToken.createJavaWebToken(m); //根据存在用户的id生成token字符串

loginInfo.setUserInf(userInf);

loginInfo.setToken(token);//存在对象中并返回给前端

returnloginInfo;

}/*** token验证方法

*@paramrc

*@paramresponse

*@return

*/@RequestMapping(value= "/tokenConfirm")publicLoginInfo tokenConfirm(RequestClass rc,HttpServletResponse response){

response.setHeader("Access-Control-Allow-Origin","*");

LoginInfo loginInfo= newLoginInfo();

System.out.println(rc.getToken());if (JavaWebToken.parserJavaWebToken(rc.getToken()) != null){ //根据前端带回来的token验证

loginInfo.setTokenMark("true"); //验证通过

}else{

loginInfo.setTokenMark("false"); //验证失败

}returnloginInfo;

}

3、前台测试页面如下:

5e2a879ca4d52b9d21c4e71d836cc361.png

前端代码:

{{ title }}

账号

密码

登录

访问后台

data(){return{

title:'登录测试页面!!!',

username:'',

password:''}

},

methods:{

loginConfirm(){

console.log('username:'+this.username+"password:"+this.password);var_this= this;this.axios.get('http://localhost:8080/login', {

params: {

userName: _this.username,

passWord:_this.password

}

})

.then(function(response){varobj=response.data;

console.log(obj.token);

setCookie(obj.token);

})

.catch(function(error) {

console.log(error);

});

},

tokenConfirm(token){var_this= this;var_token=getCookie(token);this.axios.get('http://localhost:8080/tokenConfirm',{

params:{

token:_token

}

})

.then(function(response){varobj=response.data;

console.log(obj);

})

.catch(function(){

console.log(error);

});

}

},

mounted(){

}

}

h1, h2{font-weight:normal;

}ul{list-style-type:none;padding:0;

}li{display:inline-block;margin:0 10px;

}a{color:#42b983;

}

其中,引用的Cookie.js:

functionsetCookie(token){

document.cookie=token;

}functiongetCookie(){returndocument.cookie;

}

export {setCookie,getCookie}

4、开始测试,在页面输入用户的账号密码,点击登录按钮

47d87fe08e5ef1af3ef4fe5f752e6c4b.png

后台验证成功,在页面控制台输出可以看到后台返回的token

569096c9a6517260ba70de33e9b33bea.png

再点击访问后台请求的按钮,后台验证这个token并返回结果为true

d996aed311a8c2f6c75f225bbee6ab77.png

假设我们这里改变了这个token,并发送给后台,则后台对token验证失败会返回false

5d55597ca10763d948d962e71485e152.png

点击访问后台按钮

bbf43f2de3abf611aa975e8f9f8fadba.png

到此,简单的token使用验证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值