Springboot整合autho0-jwt框架解析token
阿新 • • 發佈:2018-12-11
下面是通過使用框架中整個的jwt外掛實現token解析並獲取token中的使用者名稱的使用者id的程式碼:
首先是util層:
package ai.huarui.mes.plan.util; import com.auth0.jwt.JWT; import com.auth0.jwt.exceptions.JWTDecodeException; import com.auth0.jwt.interfaces.DecodedJWT; import org.springframework.context.annotation.Configuration; @Configuration public class JWTutil { // 開發環境設定過期時間 public long EXPIRE_TIME = 2*60*1000; /** * 通過header頭部的token得到id * @return token中包含的id */ public static Integer getId(String token) { System.err.println( "Integer getId入參:" + token); try{ DecodedJWT jwt = JWT.decode(token); System.err.println( "Integer getId出參:" + jwt.getClaim("id").asInt()); return jwt.getClaim("id").asInt(); } catch (JWTDecodeException e) { System.err.println( "Integer getId出參===========" + "sss" + ":" ); return null; } } /** * 通過header頭部的token得到login_name * @return token中包含的使用者名稱 */ public static String getUserName(String token) { try { DecodedJWT jwt = JWT.decode(token); System.out.println("jwt解析的name = " + jwt.getClaim("user_name").asString()); return jwt.getClaim("user_name").asString(); } catch (JWTDecodeException e) { System.out.println("解析name失敗"); return null; } } }
然後通過一個類,這裡其實可以定義在model層,或者依然是util層,看自己情況。
package ai.huarui.mes.plan.util; import org.springframework.context.annotation.Configuration; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @Configuration public class CreateOrUpdateutil { /** * 用於新增方法,得到建立人id; * 用於更新方法,得到修改人id; * */ public static Map<String, Object> getCreateOrUpdateUserId(HttpServletRequest request){ //通過請求頭的token解析出當前登入使用者的id,用於建立人id String token = request.getHeader("Authorization"); Integer create_or_update_user_id = JWTutil.getId(token); if(create_or_update_user_id == null){ System.err.println("CreateOrUpdateutil/getCreateOrUpdateUserId獲取user_id為空"); }else{ System.out.println("打印出參id : "+ create_or_update_user_id ); } String create_or_update_user_name = JWTutil.getUserName(token); if(create_or_update_user_name == null){ System.err.println("CreateOrUpdateutil/getCreateOrUpdateUserId獲取user_name為空"); }else{ System.out.println("打印出參name : "+ create_or_update_user_name ); } Map<String, Object> map = new HashMap<>(); map.put("create_or_update_user_id", create_or_update_user_id); map.put("create_or_update_user_name", create_or_update_user_name); return map; } }
然後是controller層:
Map<String, Object> create_or_update = CreateOrUpdateutil.getCreateOrUpdateUserId(request); map.put("create_or_update_user_id",(Integer)create_or_update.get("create_or_update_user_id")); map.put("create_or_update_user_name",create_or_update.get("create_or_update_user_name").toString());
在controller層獲取到token的值之後,就可以進行進一步的校驗或者將獲取到的變數值作為引數進行傳遞。