1. 程式人生 > >Springboot整合autho0-jwt框架解析token

Springboot整合autho0-jwt框架解析token

下面是通過使用框架中整個的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的值之後,就可以進行進一步的校驗或者將獲取到的變數值作為引數進行傳遞。