您好,登錄后才能下訂單哦!
本篇文章為大家展示了基于JWT中的spring boot實現權限驗證技術,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
JWT簡介
Json Web Token(JWT):JSON網絡令牌,是為了在網絡應用環境間傳遞聲明而制定的一種基于JSON的開放標準((RFC 7519)。JWT是一個輕便的安全跨平臺傳輸格式,定義了一個緊湊的自包含的方式用于通信雙方之間以 JSON 對象行使安全的傳遞信息。因為數字簽名的存在,這些信息是可信的。
實現步驟:
環境spring boot
1、添加jwt依賴
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
2、在src下創建annotation包
​ 新建自定義注解類 JwtToken
package com.qf.tyleryue_one.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定義注解:方法前 表示方法需要攔截 */ @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface JwtToken { }
3、在src下創建utils包
​ 新建自定義JwtUtils工具類
package com.qf.tyleryue_one.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import jdk.internal.org.objectweb.asm.TypeReference; import java.util.Date; /** * 用來生成簽名,校驗簽名,通過簽名 */ public class JwtUtils { //令牌有效時間 private final static long EXPIRE_TIME=5*60*1000; //密鑰 private final static String SECRECT="Tyler_Yue_key"; /** * 創建令牌 */ public static String sign(String userId){ //構建失效時鐘 Date exipre_date = new Date(System.currentTimeMillis() + EXPIRE_TIME); //創建令牌 JWTCreator.Builder builder = JWT.create(); //給jwt令牌playload中放入發令牌放的用戶 //給userid用戶發令牌 builder.withAudience(userId); //設置令牌失效時間 builder.withExpiresAt(exipre_date); //對令牌密鑰進行加密 Algorithm algorithm = Algorithm.HMAC256(SECRECT); String sign = builder.sign(algorithm); return sign;//返回令牌 } /** * 驗證令牌 */ public static boolean verifyToken(String token){ try { //生成校驗器 Algorithm algorithm = Algorithm.HMAC256(SECRECT); //校驗 JWTVerifier build = JWT.require(algorithm).build(); //無異常則校驗成功 return true; } catch (Exception e) { throw new RuntimeException("令牌過期"); } } }
4、在src下新建vo包
封裝一個返回用戶帶令牌的 對象
package com.qf.tyleryue_one.vo; import com.alibaba.druid.filter.AutoLoad; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * 封裝一個返回 含令牌的用戶對象 */ @Data @AllArgsConstructor @NoArgsConstructor public class TokenVo { //用戶名 private String usernaem; //令牌名 private String token; }
5、舉例controller層用戶登錄業務登錄帶令牌
package com.qf.tyleryue_one.controller; import com.qf.tyleryue_one.entity.VueUser; import com.qf.tyleryue_one.service.VueUserService; import com.qf.tyleryue_one.utils.JwtUtils; import com.qf.tyleryue_one.vo.Msg; import com.qf.tyleryue_one.vo.TokenVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.UUID; /** * 登錄業務 */ @Controller public class VueUserController { @Autowired private VueUserService vueUserService; @RequestMapping(value = "/dealLogin",method = RequestMethod.POST) @CrossOrigin @ResponseBody public Msg login(@RequestBody VueUser vueUser){ VueUser vueUser1 = vueUserService.selectByUsername(vueUser.getUsername()); if (vueUser1!=null){ if (vueUser1.getPassword().equals(vueUser.getPassword())){ //密碼匹配,發放令牌 ///隨機生成字符串未userid String userid = UUID.randomUUID().toString(); String token = JwtUtils.sign(userid); //封裝令牌對象 TokenVo tokenVo = new TokenVo(vueUser.getUsername(), token); return new Msg(200,"登錄成功,令牌已發放",tokenVo); }else { return new Msg(403,"密碼錯誤",null); } }else { return new Msg(403,"用戶不存在",null); } } }
上述內容就是基于JWT中的spring boot實現權限驗證技術,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。