日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot+jwt實現token登陸權限認證的實現

瀏覽:24日期:2023-05-14 16:15:44

一 前言

此篇文章的內容也是學習不久,終于到周末有時間碼一篇文章分享知識追尋者的粉絲們,學完本篇文章,讀者將對token類的登陸認證流程有個全面的了解,可以動態搭建自己的登陸認證過程;對小項目而已是個輕量級的認證機制,符合開發需求;

二 jwt實現登陸認證流程

用戶使用賬號和面發出post請求 服務器接受到請求后使用私鑰創建一個jwt,這邊會生成token 服務器返回這個jwt給瀏覽器 瀏覽器需要將帶有token的jwt放入請求頭 每次手到客戶端請求,服務器驗證該jwt的token 驗證成功返回響應的資源給瀏覽器。否則異常處理

三 相關介紹jwt

3.1jwt 組成

JWT的token由三段信息構成的,將這三段信息文本用.連接一起就構成了JWT字符串;

Header 頭部(包含了令牌的元數據,并且包含簽名和或加密算法的類型) Payload 負載 Signature 簽名/簽證

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODI4OTc4NDUsInVzZXJuYW1lIjoienN6eHoifQ.vyiExkFWCCmQA3PFYL0jJfIiYGWubngqB0WcgmtHOxg

3.2 jwt優點

簡潔(Compact): 可以通過URL,POST參數或者在HTTP header發送,數據量小,傳輸速度快 自包含(Self-contained):負載中包含了所有用戶所需要的信息,避免多次查詢數據庫 .因為Token是以JSON加密的形式保存在客戶端的,所以JWT是跨語言支持; 不需要在服務端保存會話信息,適用于分布式與微服務;

四 jwt用戶登陸發放token

4.1 pom.xml

項目構件如下

springboot 2.1; jwt 3.4.0; maven 3.5 jdk1.8 postman接口測試

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>

4.2jwt工具類

jwt工具類中有三個方法,分別是生成數字簽名用于用戶首次登陸時發送jwt給客戶端;其次是校驗方法,用于攔截器攔截所有規則內的url,每個請求都必須帶有服務器發送的jwt,經過驗證后才放行請求;最后一個獲得用戶名的方法用于查詢密鑰,在驗證jwt時作為參數傳入;

/* * * @Author lsc * <p> JWT工具類 </p> * @Param * @Return */public class JwtUtil { // Token過期時間30分鐘 public static final long EXPIRE_TIME = 30 * 60 * 1000; /* * * @Author lsc * <p> 校驗token是否正確 </p> * @Param token * @Param username * @Param secret * @Return boolean */ public static boolean verify(String token, String username, String secret) { try { // 設置加密算法 Algorithm algorithm = Algorithm.HMAC256(secret); JWTVerifier verifier = JWT.require(algorithm) .withClaim('username', username) .build(); // 效驗TOKEN DecodedJWT jwt = verifier.verify(token); return true; } catch (Exception exception) { return false; } } /* * * @Author lsc * <p>生成簽名,30min后過期 </p> * @Param [username, secret] * @Return java.lang.String */ public static String sign(String username, String secret) { Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); Algorithm algorithm = Algorithm.HMAC256(secret); // 附帶username信息 return JWT.create() .withClaim('username', username) .withExpiresAt(date) .sign(algorithm); } /* * * @Author lsc * <p> 獲得用戶名 </p> * @Param [request] * @Return java.lang.String */ public static String getUserNameByToken(HttpServletRequest request) { String token = request.getHeader('token'); DecodedJWT jwt = JWT.decode(token); return jwt.getClaim('username') .asString(); }}

4.3 用戶實體

實體中包含用戶名,和密碼,一切從簡;

/** * @Author lsc * <p> </p> */@Datapublic class SysUser { private String username; private String password;}

4.4Controller

表現層代碼用戶用戶登陸認證,認證成功后發放token給客戶端;

/** * @Author lsc * <p> </p> */@RestControllerpublic class SysUserController { @PostMapping(value = '/login') public Map<String, Object> login(@RequestBody SysUser sysUser){ Map<String, Object> map = new HashMap<>(); String username = sysUser.getUsername(); String password = sysUser.getPassword(); // 省略 賬號密碼驗證 // 驗證成功后發送token String token = JwtUtil.sign(username,password); if (token != null){ map.put('code', '200'); map.put('message','認證成功'); map.put('token', token); return map; } map.put('code', '403'); map.put('message','認證失敗'); return map; }}

4.5 測試

測試url http://localhost:8080/login

postman post請求測試參數如下

{ 'username': 'zszxz', 'password': 'zszxz'}

返回內容如下

{ 'code': '200', 'message': '認證成功', 'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODI4OTc4NDUsInVzZXJuYW1lIjoienN6eHoifQ.vyiExkFWCCmQA3PFYL0jJfIiYGWubngqB0WcgmtHOxg'}

五 jwt登陸攔截認證

基于前面已經實現jwt登錄認證后發放token給客戶端;本節內容就是將token放入請求頭中發送請求給服務器;服務器使用攔截器攔截請求對token進行驗證;驗證成功請求通過,否則請求資源失敗;

5.1自定義攔截器

自定義攔截器JwtInterceptor,實現HandlerInterceptor接口,每次請求到達之前都會驗證token是否有效;

/** * @Author lsc * <p>token驗證攔截器 </p> */@Componentpublic class JwtInterceptor implements HandlerInterceptor { @Autowired SysUserService sysUserService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 從 http 請求頭中取出 token String token = request.getHeader('token'); // 如果不是映射到方法直接通過 if(!(handler instanceof HandlerMethod)){ return true; } if (token != null){ String username = JwtUtil.getUserNameByToken(request); // 這邊拿到的 用戶名 應該去數據庫查詢獲得密碼,簡略,步驟在service直接獲取密碼 boolean result = JwtUtil.verify(token,username,sysUserService.getPassword()); if(result){ System.out.println('通過攔截器'); return true; } } return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}

5.2 service

/** * @Author lsc * <p> 模擬查詢數據庫獲得賬號密碼 </p> */@Servicepublic class SysUserService { public String getPassword(){ return 'zszxz'; }}

5.3攔截器配置

攔截器配置中主要定義攔截請求規則,將攔截器注入WebMvcConfigurer;cors跨域處理;

/* * * @Author lsc * <p>攔截器配置 </p> * @Param * @Return */@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { /* * * @Author lsc * <p> 設置攔截路徑 </p> * @Param [registry] * @Return void */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authenticationInterceptor()) .addPathPatterns('/**') .excludePathPatterns('/login'); } /* * * @Author lsc * <p> 將攔截器注入context </p> * @Param [] * @Return com.zszxz.jwt.interceptor.JwtInterceptor */ @Bean public JwtInterceptor authenticationInterceptor() { return new JwtInterceptor(); } /* * * @Author lsc * <p>跨域支持 </p> * @Param [registry] * @Return void */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping('/**') .allowedOrigins('*') .allowCredentials(true) .allowedMethods('GET', 'POST', 'DELETE', 'PUT', 'PATCH', 'OPTIONS', 'HEAD') .maxAge(3600 * 24); }}

5.4Controller

表現層接口用于攔截親求測試

/** * @Author lsc * <p> </p> */@RestControllerpublic class TestController { @GetMapping(value = '/api/test') public String get(){ return 'zszxz'; }}

5.5 測試

測試url http://localhost:8080/api/test

發送get請求給服務器,帶有請求頭,key為token,value為用戶首次登陸時返回的token串;

測試返回內容如下

zszxz

六 官網鏈接

https://jwt.io/introduction/

到此這篇關于springboot+jwt實現token登陸權限認證的實現的文章就介紹到這了,更多相關springboot jwt token登陸權限 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
荡女精品导航| 婷婷激情久久| 亚洲青青久久| 免费不卡中文字幕在线| 亚洲性色视频| 亚洲一区二区三区在线免费| 亚洲aa在线| 国产精品亚洲成在人线| 国产精品一区二区三区av| 久久伊人国产| 视频福利一区| 日韩一级欧洲| 日韩福利视频网| 国产福利一区二区三区在线播放| 美女精品久久| 999精品在线| 欧美专区一区二区三区| 欧美午夜三级| 国产成人精品一区二区三区视频| 91精品韩国| 免播放器亚洲| 麻豆极品一区二区三区| 久久男女视频| 日韩精品三区四区| 成人一区不卡| 日韩中文字幕不卡| 欧美91在线| 亚洲成人一区| 日韩国产成人精品| 日韩不卡在线| 日精品一区二区三区| 久久久久久婷| 日韩一区免费| 日韩免费视频| 免费视频最近日韩| 国产成人久久精品一区二区三区| 午夜在线播放视频欧美| 久久精品伊人| 免费看的黄色欧美网站| 成人在线超碰| 亚洲精品福利| 日韩精品久久久久久久电影99爱 | 亚洲va中文在线播放免费| 天堂成人免费av电影一区| 精品国产乱码久久久| 亚洲一区区二区| 日韩av午夜在线观看| 日韩欧美中文| 国产精品密蕾丝视频下载| 五月婷婷亚洲| 韩国女主播一区二区三区| 久久xxxx精品视频| 日韩精品一区二区三区免费观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久精品女人| 美日韩精品视频| 久久97久久97精品免视看秋霞| 香蕉精品999视频一区二区| av资源亚洲| 国产精品xvideos88| 亚洲人成亚洲精品| 亚洲国产日韩欧美在线| 国产夫妻在线| 麻豆精品99| 欧美片网站免费| 丝袜亚洲另类欧美| 亚洲欧美伊人| 蜜桃av.网站在线观看| 欧美激情aⅴ一区二区三区 | 欧美一区网站| 石原莉奈在线亚洲二区| 欧美亚洲激情| 成人日韩在线| 成人亚洲一区| 精品高清久久| 欧美黑人巨大videos精品| 涩涩涩久久久成人精品| 好吊一区二区三区| 久久精品国产68国产精品亚洲| 福利片在线一区二区| 久久精品99国产精品| 视频在线观看国产精品| 午夜视频精品| 黄色国产精品| 亚洲精品电影| 黄色亚洲免费| 日韩视频一区二区三区在线播放免费观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲激情二区| 欧美日韩国产传媒| 99久久99久久精品国产片果冰| 欧美13videosex性极品| 日韩在线视频精品| 久久毛片亚洲| 日韩一区二区在线免费| 激情亚洲影院在线观看| 999国产精品999久久久久久| 日韩中文在线电影| 亚洲精品.com| 今天的高清视频免费播放成人| 亚洲先锋成人| 首页亚洲欧美制服丝腿| 久久国产成人| 美女被久久久| 日本一区二区三区视频在线看| 日本久久二区| 久久99偷拍| 在线手机中文字幕| 91精品在线观看国产| 黄色免费成人| 综合色一区二区| 国产精品日本一区二区三区在线| 国产精品一页| 中国字幕a在线看韩国电影| 在线一区视频观看| 婷婷亚洲综合| 亚洲精品一二| 国产精品jk白丝蜜臀av小说| 久久69成人| 秋霞影视一区二区三区| 欧美天堂亚洲电影院在线观看| 人人爽香蕉精品| 国产精品最新| 亚洲www啪成人一区二区| 亚洲欧美日韩视频二区| 亚洲精品自拍| 精品国产网站| 成人av二区| 色综合视频一区二区三区日韩| 国产精品亚洲综合在线观看| 成人欧美一区二区三区的电影| 亚洲激情偷拍| 国产精品tv| 欧美日韩精品一本二本三本| 欧美日韩一区自拍| 精品日韩视频| 日韩av不卡在线观看| av中文字幕在线观看第一页| re久久精品视频| 青青草91视频| 日韩中文影院| 青青青国产精品| 丝袜美腿一区| 日韩av不卡一区二区| 91亚洲一区| 免费观看在线综合| 国产一区二区三区不卡视频网站| 日韩视频一区| 精品一区二区三区在线观看视频| 欧美日韩黑人| 韩国一区二区三区视频| 亚洲欧美日韩精品一区二区| 美女视频黄免费的久久| 夜夜嗨网站十八久久| 麻豆国产欧美一区二区三区 | 欧美精品一二| 久久精品国产999大香线蕉| 夜夜精品视频| 国产精品二区不卡| 日韩精品a在线观看91| 亚洲综合在线电影| 国产精品久久亚洲不卡| 国产精品婷婷| 国产成人精品亚洲线观看| 免费在线视频一区| 日韩综合精品| 国产精品a久久久久| 久久成人一区| 精品三级久久| 免费一区二区三区在线视频| 免费在线视频一区| 亚洲a在线视频| 美女久久99| 日韩一区二区三区在线看| 美女久久久久| 日本不卡免费高清视频在线| 国产麻豆一区二区三区| 美国三级日本三级久久99| 成人日韩在线观看| 国产一区二区三区网| 国产欧美三级| 亚洲97av| 国产一区二区精品| 天堂日韩电影| 国产中文在线播放| 国模大尺度视频一区二区| 日韩福利视频导航| 亚洲毛片在线| 三级一区在线视频先锋| 五月综合激情| 久久久久久免费视频| 一区二区精品伦理...| 精品国产欧美| 国产一区二区三区日韩精品| 欧美a一区二区| 国产精品白丝久久av网站| 青青国产91久久久久久| 水蜜桃久久夜色精品一区的特点| 亚洲成人一区在线观看| 亚洲伦乱视频|