色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

SpringBoot集成JWT生成token及校驗方法過程解析

瀏覽:8日期:2023-05-25 16:23:29

GitHub源碼地址:https://github.com/zeng-xian-guo/springboot_jwt_token.git

封裝JTW生成token和校驗方法

public class JwtTokenUtil { //公用密鑰-保存在服務端,客戶端是不會知道密鑰的,以防被攻擊 public static String SECRET = 'ThisIsASecret'; //生成Troke public static String createToken(String username) { //簽發時間 //Date iatDate = new Date(); //過地時間 1分鐘后過期 //Calendar nowTime = Calendar.getInstance(); //nowTime.add(Calendar.MINUTE, 1); //Date expiresDate = nowTime.getTime(); Map<String, Object> map = new HashMap(); map.put('alg', 'HS256'); map.put('typ', 'JWT'); String token = JWT.create() .withHeader(map) //.withClaim( 'name','Free碼生') //設置 載荷 Payload //.withClaim('age','12') //.withClaim( 'org','測試') //.withExpiresAt(expiresDate)//設置過期時間,過期時間要大于簽發時間 //.withIssuedAt(iatDate)//設置簽發時間 .withAudience(username) //設置 載荷 簽名的觀眾 .sign(Algorithm.HMAC256(SECRET));//加密 System.out.println('后臺生成token:' + token); return token; } //校驗TOKEN public static boolean verifyToken(String token) throws UnsupportedEncodingException{ JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build(); try { verifier.verify(token); return true; } catch (Exception e){ return false; } } //獲取Token信息 public static DecodedJWT getTokenInfo(String token) throws UnsupportedEncodingException{ JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build(); try{ return verifier.verify(token); } catch(Exception e){ throw new RuntimeException(e); } }}

新建自定義注解:@UserLoginToken

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface UserLoginToken { boolean required() default true;}

關于攔截器配置:

@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authenticationInterceptor()).addPathPatterns('/**'); // 攔截所有請求,通過判斷是否有 @LoginRequired 注解 決定是否需要登錄 } @Bean public AuthenticationInterceptor authenticationInterceptor() { return new AuthenticationInterceptor(); }}

public class AuthenticationInterceptor implements HandlerInterceptor { @Autowired UserService userService; @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception { String token = httpServletRequest.getHeader('token');// 從 http 請求頭中取出 token // 如果不是映射到方法直接通過 if(!(object instanceof HandlerMethod)){ return true; } HandlerMethod handlerMethod=(HandlerMethod)object; Method method=handlerMethod.getMethod(); //檢查是否有passtoken注釋,有則跳過認證 if (method.isAnnotationPresent(PassToken.class)) { PassToken passToken = method.getAnnotation(PassToken.class); if (passToken.required()) {return true; } } //檢查有沒有需要用戶權限的注解 if (method.isAnnotationPresent(UserLoginToken.class)) { UserLoginToken userLoginToken = method.getAnnotation(UserLoginToken.class); if (userLoginToken.required()) {// 執行認證if (token == null) { throw new RuntimeException('無token,請重新登錄');}// 驗證 tokenif(JwtTokenUtil.verifyToken(token)){ return true;}else { throw new RuntimeException('401');} } } return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { }}

登錄:

在Controller上登錄方法不用添加@UserLoginToken自定義注解,其余獲取后臺數據方法加上@UserLoginToken自定義注解,目的驗證token是否有效,是則返回數據,否則提示401無權限。

測試:

@Controller@RequestMapping(path = '/api')public class IndexController { private String prefix = 'index/'; @GetMapping('/index') public String index() { return prefix + 'index'; } @UserLoginToken @PostMapping('/test') @ResponseBody public Object test(){ Map<String,Object> map = new HashMap<>(); map.put('code','200'); map.put('message','你已通過驗證了'); return map; }}

HTTP請求帶上登陸成功后生成token,返回成功:

SpringBoot集成JWT生成token及校驗方法過程解析

HTTP請求帶上無效token或不帶token,返回失敗:

SpringBoot集成JWT生成token及校驗方法過程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美日韩国产一区二区三区在线观看 | 国产亚洲精品成人久久网站 | 免费香蕉成视频成人网 | 一色屋精品亚洲香蕉网站 | 亚洲国产成人久久99精品 | 国产精品成人免费综合 | www.三级| 国产成人理在线观看视频 | 久久国产美女免费观看精品 | a级毛片毛片免费很很综合 a级毛片免费 | 香蕉视频在线观看黄 | 成人免费一级在线播放 | 99九九国产精品免费视频 | 亚洲一区精品在线 | 另类专区另类专区亚洲 | 黄页网址免费观看18网站 | 97免费视频在线 | 色偷偷88欧美精品久久久 | 成人精品在线观看 | 国产精品手机在线观看 | 亚洲一级毛片免观看 | 手机看片自拍自自拍日韩免费 | 国产亚洲精品一区二区在线播放 | 欧美三级在线观看视频 | 亚洲人成综合 | 婷婷尹人香蕉久久天堂 | 在线看片中文字幕 | 日本天堂网址 | 欧美一级毛片免费播放aa | 8050网午夜一级毛片免费不卡 | 国产中的精品一区的 | 日本精品中文字幕有码 | 成年男女拍拍拍免费视频 | 日韩欧美一区二区三区免费观看 | 国产成人丝袜网站在线看 | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 99精品国产兔费观看久久99 | 成年女人免费视频播放成年m | 国产成人精品免费视频大全软件 | 国产不卡影院 | 欧美黑寡妇特a级做爰 |