忙碌的一天又过去了,下班回家头昏眼花的...
要完成铁人赛真的需要超凡意志,还好今天星期五...
好,今天终於要来实作JWT了!
因为时间有限,就以最简单的方式来实作吧!
首先,为了产生JWT,先到pom.xml新增以下依赖:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
虽然照理来讲,应该要独立一个类别写JWT的产生与验证比较好,
不过,为了赶进度,我直接在先前建立的UserService内的
verifyUser方法,加入产生token的程序:
public String verifyUser(String email,String userAcct , String userPasswd){ /* 0000 login success 0001 wrong email 0002 wrong useracct 0003 wrong passwd 0004 acct locked */ Optional<User> user=userRepo.findUserByEmail(email); String result="9999"; if(user.isPresent()){ if(user.get().getUserAccount().equals(userAcct)){ if(user.get().getUserPassword().equals(userPasswd)){ //新增了以下这段: Date expireDate = //设定30min过期 new Date(System.currentTimeMillis()+ 30 * 60 * 1000); String jwtToken = Jwts.builder() .setSubject(email) //我以email当subject .setExpiration(expireDate) //MySecret是自订的私钥,HS512是自选的演算法,可以任意改变 .signWith(SignatureAlgorithm.HS512,"MySecret") .compact(); //直接将JWT传回 result=jwtToken; }else{ result="0003"; } }else{ result="0002"; } }else{ result="0001"; } return result; }
我把原本验证成功回传的0000改成直接回传token了
就加个几行而已,很简单易懂吧~
在测试时,我遇到了以下错误
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
查了之後发现是要再加jaxb-api的依赖
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
原来在java 8时,javax.xml.bind相关类别都预设在jdk里面就有的,
但是jdk11之後就都被移除了,有需要的话要自己再手动加入jar
直接用postman测看看,
得到了:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0NDU2QDEyMy5jY2MiLCJleHAiOjE2MzI0OTg4NDF9.Zc8RSbpc2mpQc0jeFpyTenax4kAClNagvCADs7Aq9co082KYARnJDMch7svKpheY_LHnNaKhIJ_7kwImlLemaQ
可以把token放到https://jwt.io/
确认看看是不是一个正确格式的jwt
看起来ok
接下来,登入验证的部分就剩下jwt的验证跟spring security的设定了
预计明天把这个段落做个结尾,
其实本来是打算只花两天在登入验证上的,
不过刚好工作比较忙,就被我多拖了几天
战略资讯系统 中台架构其实是一种整体资讯架构订定的思维,其目的是为了迎接企业不断创新的挑战,在『变是...
JavaScript 日常系列写着写着,就此进入了我的苦手范围QQ,之後的主题应该都是我的修罗场,考...
前言 我们知道了如何在个人电脑上执行训练/使用一个 Deep Learning Model ,更进一...
这系列内容主要内容是在讲如何用 Next.js 取代 WordPress 前端,因此约 70% 内容...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 当网站有 to-do list 时...