天天看點

攔截器token驗證+權限

攔截器token驗證+權限

建立類

IntercepterConfig

package com.example.hotelmanagement.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/*
 * 攔截器配置
 */

@Configuration
public class IntercepterConfig implements WebMvcConfigurer {

    private TokenInterceptor tokenInterceptor;

/*
     * @param tokenInterceptor
     * @return
     * @introduction: 構造方法
     * @date 2021/5/19 21:41
     */

    public IntercepterConfig(TokenInterceptor tokenInterceptor) {
        this.tokenInterceptor = tokenInterceptor;
    }

/*
     * @param registry
     * @return void
     * @introduction: 設定攔截路徑
     * @date 2021/5/19 21:41
     */

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        List<String> excludePath = new ArrayList<>();
        //放開權限
        excludePath.add("/info/findLogin"); //登入
        excludePath.add("/**");//放開所有
        //excludePath.add("/client/findAll");//放開客戶基本資訊查詢全部
        excludePath.add("/static/**");  //靜态資源

        //注入攔截器
        registry.addInterceptor(tokenInterceptor)
                .addPathPatterns("/**") // 攔截所有請求,通過判斷是否有 @LoginRequired 注解 決定是否需要登入
//                .excludePathPatterns("/user")//不攔截的
                .excludePathPatterns(excludePath);
        WebMvcConfigurer.super.addInterceptors(registry);

    }

/*
     * @param registry
     * @return void
     * @introduction: 跨域支援
     * @date 2021/5/19 21:44
     */

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH", "OPTIONS", "HEAD")
                .maxAge(3600 * 24);
    }

}


           

TokenInterceptor

package com.example.hotelmanagement.config;

import com.alibaba.fastjson.JSONObject;
import com.example.hotelmanagement.model.entity.RolePermission;
import com.example.hotelmanagement.utils.TokenUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.lang.reflect.Method;

@Component
public class TokenInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判斷狀态
        if (request.getMethod().equals("OPTIONS")) {
            response.setStatus(HttpServletResponse.SC_OK);
            return true;
        }
        //執行個體化
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        //傳回此處理程式方法的方法,也就是取得接口的方法
        Method method = handlerMethod.getMethod();
        //檢視接口是否存在注釋
        if (method.isAnnotationPresent(RolePermission.class)) {
            //取得接口的注解
            RolePermission annotation = method.getAnnotation(RolePermission.class);
            //擷取login的通路權限,是登入完通路,還是不登入就可以通路
            if (!annotation.login()) {
                return true;
            }
        }
        //設定編碼
        response.setCharacterEncoding("utf-8");
        // 從 http 請求頭中取出 token
        String token = request.getHeader("token");
        System.out.println("token   :"+token);//輸出token
        if (token != null) {
            //判斷是否通過驗證
            boolean result = TokenUtil.verify(token);
            //權限
            String status = TokenUtil.getRoleByToken(request);
            //檢視接口是否存在注釋
            if (method.isAnnotationPresent(RolePermission.class)) {
                //取得接口的注解
                RolePermission annotation = method.getAnnotation(RolePermission.class);
                //擷取權限
                String roleRolePermission = annotation.status();
                if (StringUtils.isBlank(roleRolePermission)) {
                    throw new Exception("接口權限擷取失敗");
                }
                //使用indexOf方法從頭開始檢索是否存在role,存在就傳回位置,不存在就傳回-1
                int i = roleRolePermission.indexOf(status);
                if (i == -1) {
                    throw new Exception("使用者權限不足");
                }
            }
            if (result) {
                System.out.println("通過攔截器");
                return true;
            }
        }
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        PrintWriter out = null;
        try {
            JSONObject json = new JSONObject();
            json.put("success", "false");
            json.put("msg", "認證失敗,未通過攔截器");
            json.put("code", "50000");
            response.getWriter().append(json.toJSONString());
            System.out.println("認證失敗,未通過攔截器");
            //        response.getWriter().write("50000");
        } catch (Exception e) {
            e.printStackTrace();
            response.sendError(500);
            return false;
        }


        return false;

    }



}


           

BaseException

package com.example.hotelmanagement.utils.common;

/**
 * 系統自定義異常
 * 服務節點異常,必須先繼承該類
 */
public class BaseException extends RuntimeException {
    /**
     * 參考
     */
    private String code;
    /**
     * 錯誤資訊
     */
    private String errorMessage;


    public BaseException(String code) {
        this.code = code;
        this.errorMessage = "";
    }

    public BaseException(String code, String errorMessage) {
        super(errorMessage);
        this.code = code;
        this.errorMessage = errorMessage;

    }

    public BaseException(String code, String errorMessage, Throwable e) {
        super(errorMessage, e);
        this.code = code;
        this.errorMessage = errorMessage;
    }

    /**
     * 建立一個系統配置異常方法
     * <p>未找到相關服務請求</p>
     *
     * @param errorMessage 錯誤資訊
     * @return 執行個體
     */
    public static BaseException createSysActionNotFound(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_SYS_ACTION_NOT_FOUND, errorMessage);
    }

    /**
     * 建立一個請求參數異常方法
     * <p>參數格式不比對</p>
     *
     * @param errorMessage 錯誤資訊
     * @return 執行個體
     */
    public static BaseException createClientParams(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_CLIENT_PARAMETER_FORMAT_NOT_MATCH, errorMessage);
    }

    /**
     * 建立一個系統配置異常方法
     * <p>系統轉換資料失敗</p>
     *
     * @param errorMessage 錯誤資訊
     * @param e            異常資訊
     * @return 執行個體
     */
    public static BaseException createSysDataConvert(String errorMessage, Exception e) {
        return new BaseException(ConstantResultCode.ERROR_SYS_FAILED_DATA_CONVERT, errorMessage, e);
    }

    /**
     * 建立一個系統資料結構異常方法
     * <p>相關資料缺失</p>
     * <p>系統不可能出行的資料錯誤,一般由手工修改導緻的錯誤</p>
     *
     * @param errorMessage 錯誤相關資訊
     * @return 異常執行個體
     */
    public static BaseException createSysDataStructure(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_SYS_DATA_STRUCTURE, errorMessage);
    }


    /**
     * 建立一個系統資料結構異常方法
     * <p>擷取系統配置參數異常</p>
     *
     * @param errorMessage 錯誤相關資訊
     * @return 異常執行個體
     */
    public static BaseException createSysConf(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_SYS_CONF, errorMessage);
    }

    /**
     * 系統代碼邏輯異常
     * <p>1.出現不符合設計邏輯時抛出異常</p>
     *
     * @param errorMessage 錯誤相關資訊
     * @return 異常執行個體
     */
    public static BaseException createSysCode(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_SYS_CODE, errorMessage);
    }

    /**
     * 遠端調用回報失敗
     *
     * @param errorMessage 錯誤相關資訊
     * @return 異常執行個體
     */
    public static BaseException createRemote(String errorMessage) {
        return new BaseException(ConstantResultCode.ERROR_REMOTE, errorMessage);
    }

    /**
     * 遠端調用異常
     *
     * @param errorMessage 錯誤相關資訊
     * @param e            異常資訊
     * @return 異常執行個體
     */
    public static BaseException createRemote(String errorMessage, Exception e) {
        return new BaseException(ConstantResultCode.ERROR_REMOTE_MIDDLEWARE, errorMessage, e);
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }
}

           

ConstantBase

package com.example.hotelmanagement.utils.common;

import java.io.Serializable;

/**
 * 常量接口
 *
 * @param <T> 指定常量泛型
 */
public interface ConstantBase<T extends Serializable> {
    /**
     * 擷取名稱,無對應值時傳回 ""
     *
     * @param val 常量值
     * @return 常量名稱
     */
    String getName(T val);

    /**
     * 擷取分類名稱
     *
     * @return 類型名
     */
    default String getCategoryName() {
        return "";
    }

    /**
     * 是否允許使用者新增,預設不允許
     *
     * @return Boolean
     */
    default boolean isUserAppend() {
        return false;
    }

    /**
     * 擷取名稱
     *
     * @param obj 常量值
     * @return 常量名稱(參數為Null或不存在該常量 , 傳回Null)
     */
    default String getNameByObject(Object obj) {
        T t = convertByObject(obj);
        return getName(t);
    }

    /**
     * 通過Object轉換為目前常量值,不能轉換抛出異常
     *
     * @param obj Object類型的參數
     * @return T
     */
    default T convertByObject(Object obj) {
        try {
            return (T) obj;
        } catch (Exception e) {
            throw new BaseException(ConstantResultCode.ERROR_SYS_FAILED_DATA_CONVERT, "未實作資料轉換:" + this.getClass().getSimpleName());
        }
    }


    /**
     * 根據名擷取常量值
     *
     * @param name 常量名稱
     * @return 常量值
     */
    default T getValue(String name) {
        throw new RuntimeException("未實作該功能:根據名擷取常量值" + this.getClass().getSimpleName());
    }


}

           

ConstantResultCode

package com.example.hotelmanagement.utils.common;

import org.apache.commons.lang3.StringUtils;

/**
 * 常量--結果狀态Code
 *
 * @author luqili
 */
public class ConstantResultCode implements ConstantBase<String> {
    /**
     * 一切 ok
     */
    public static final String SUCCESS = "00000";

    /**
     * 使用者端錯誤 一級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT = "A0001";

    /**
     * 使用者注冊錯誤 二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_REGISTER = "A0100";

    /**
     * 使用者未同意隐私協定
     */
    public static final String ERROR_CLIENT_NOT_AGREE = "A0101";
    /**
     * 注冊國家或地區受限
     */
    public static final String ERROR_CLIENT_REGION_LIMIT = "A0102";

    /**
     * 使用者名校驗失敗
     */
    public static final String ERROR_CLIENT_USERNAME_FAIL = "A0110";

    /**
     * 使用者名已存在
     */
    public static final String ERROR_CLIENT_USERNAME_EXISTS = "A0111";
    /**
     * 使用者名包含敏感詞
     */
    public static final String ERROR_CLIENT_ILLEGAL_WORD = "A0112";
    /**
     * 使用者名包含特殊字元
     */
    public static final String ERROR_CLIENT_SPECIAL_CHARACTER = "A0113";

    /**
     * 密碼校驗失敗
     */
    public static final String ERROR_CLIENT_PASSWORD_FAIL = "A0120";

    /**
     * 密碼長度不夠
     */
    public static final String ERROR_CLIENT_PASSWORD_LENGTH_NOT_ENOUGH = "A0121";

    /**
     * 密碼強度不夠
     */
    public static final String ERROR_CLIENT_PASSWORD_STRENGTH_NOT_ENOUGH = "A0122";

    /**
     * 校驗碼輸入錯誤
     */
    public static final String ERROR_CLIENT_CHECKCODE_INPUT_ERROR = "A0130";

    /**
     * 短信校驗碼輸入錯誤
     */
    public static final String ERROR_CLIENT_SMS_CHECKCODE_INPUT_ERROR = "A0131";

    /**
     * 郵件校驗碼輸入錯誤
     */
    public static final String ERROR_CLIENT_EMAIL_CHECKCODE_INPUT_ERROR = "A0132";

    /**
     * 語音校驗碼輸入錯誤
     */
    public static final String ERROR_CLIENT_VOICE_CHECKCODE_INPUT_ERROR = "A0133";

    /**
     * 使用者證件異常
     */
    public static final String ERROR_CLIENT_CERTIFICATE_ABNORMAL = "A0140";

    /**
     * 使用者證件類型未選擇
     */
    public static final String ERROR_CLIENT_CERTIFICATE_TYPE_UNSELECTED = "A0141";

    /**
     * 大陸身份證編号校驗非法
     */
    public static final String ERROR_CLIENT_IDCARD_ILLEGAL = "A0142";

    /**
     * 護照編号校驗非法
     */
    public static final String ERROR_CLIENT_PASSPORT_ILLEGAL = "A0143";

    /**
     * 軍官證編号校驗非法
     */
    public static final String ERROR_CLIENT_MILITARY_ID_NUMBER_ILLEGAL = "A0144";

    /**
     * 使用者基本資訊校驗失敗
     */
    public static final String ERROR_CLIENT_BASIC_INFORMATION_FAIL = "A0150";

    /**
     * 手機格式校驗失敗
     */
    public static final String ERROR_CLIENT_PHONE_FORMAT_FAIL = "A0151";

    /**
     * 位址格式校驗失敗
     */
    public static final String ERROR_CLIENT_ADDRESS_FORMAT_FAIL = "A0152";

    /**
     * 郵箱格式校驗失敗
     */
    public static final String ERROR_CLIENT_EMAIL_FORMAT_FAIL = "A0153";

    /**
     * 使用者登入異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_LOGIN_ABNORMAL = "A0200";

    /**
     * 使用者賬戶不存在
     */
    public static final String ERROR_CLIENT_ACCOUNT_NOTEXIST = "A0201";

    /**
     * 使用者賬戶被當機
     */
    public static final String ERROR_CLIENT_ACCOUNT_FREEZE = "A0202";

    /**
     * 使用者賬戶已廢棄
     */
    public static final String ERROR_CLIENT_ACCOUNT_INVALID = "A0203";

    /**
     * 使用者密碼錯誤
     */
    public static final String ERROR_CLIENT_PASSWORD_ERROR = "A0210";

    /**
     * 使用者輸入密碼錯誤次數超限
     */
    public static final String ERROR_CLIENT_PASSWORD_ERROR_TIMES_OVERRUN = "A0211";

    /**
     * 使用者身份校驗失敗
     */
    public static final String ERROR_CLIENT_IDENTITY_FILE = "A0220";

    /**
     * 使用者指紋識别失敗
     */
    public static final String ERROR_CLIENT_FINGERPRINT_FILE = "A0221";

    /**
     * 使用者面容識别失敗
     */
    public static final String ERROR_CLIENT_COUNTENANCE_FILE = "A0222";

    /**
     * 使用者未獲得第三方登入授權
     */
    public static final String ERROR_CLIENT_NO_LOGIN_AUTHORIZATION = "A0223";

    /**
     * 使用者登入已過期
     */
    public static final String ERROR_CLIENT_LOGIN_EXPIRED = "A0230";

    /**
     * 使用者驗證碼錯誤
     */
    public static final String ERROR_CLIENT_CHECKCODE_ERROR = "A0240";

    /**
     * 使用者驗證碼嘗試次數超限
     */
    public static final String ERROR_CLIENT_CHECKCODE_TIMES_OVERRUN = "A0241";

    /**
     * 通路權限異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_ACCESS_EXCEPTION = "A0300";

    /**
     * 通路未授權
     */
    public static final String ERROR_CLIENT_ACCESS_UNAUTHORIZED = "A0301";

    /**
     * 正在授權中
     */
    public static final String ERROR_CLIENT_ACCESS_AUTHORIZING = "A0302";

    /**
     * 使用者授權申請被拒絕
     */
    public static final String ERROR_CLIENT_REJECTED_AUTHORIZATION = "A0303";

    /**
     * 因通路對象隐私設定被攔截
     */
    public static final String ERROR_CLIENT_ACCESS_PRIVACY_SETTINGS_BLOCKED = "A0310";

    /**
     * 授權已過期
     */
    public static final String ERROR_CLIENT_AUTHORIZATION_EXPIRED = "A0311";

    /**
     * 無權限使用API
     */
    public static final String ERROR_CLIENT_NO_PROMISSIONS_TO_API = "A0312";

    /**
     * 使用者通路被攔截
     */
    public static final String ERROR_CLIENT_ACCESS_BLOCKED = "A0320";

    /**
     * 黑名單使用者
     */
    public static final String ERROR_CLIENT_BLACKLIST_USERS = "A0321";

    /**
     * 賬号被當機
     */
    public static final String ERROR_CLIENT_ACCOUNT_IS_FROZEN = "A0322";

    /**
     * 非法IP位址
     */
    public static final String ERROR_CLIENT_ILLEGAL_IP_ADDRESS = "A0323";

    /**
     * 網關通路受限
     */
    public static final String ERROR_CLIENT_GATEWAY_ACCESS_RESTRICTED = "A0324";

    /**
     * 地域黑名單
     */
    public static final String ERROR_CLIENT_REGIONAL_BLACKLIST = "A0325";

    /**
     * 服務已欠費
     */
    public static final String ERROR_CLIENT_SERVICE_ARREARS = "A0330";

    /**
     * 使用者簽名異常
     */
    public static final String ERROR_CLIENT_SIGNATURE_EXCEPTION = "A0340";

    /**
     * RSA簽名錯誤
     */
    public static final String ERROR_CLIENT_RSA_SIGNATURE_ERROR = "A0341";

    /**
     * 使用者請求參數錯誤  二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_REQUEST_PARAMETER_ERROR = "A0400";

    /**
     * 包含非法惡意跳轉連結
     */
    public static final String ERROR_CLIENT_ILLEGAL_MALICIOUS_LINKS = "A0401";

    /**
     * 無效的使用者輸入
     */
    public static final String ERROR_CLIENT_INVALID_INPUT = "A0402";

    /**
     * 請求必填參數為空
     */
    public static final String ERROR_CLIENT_REQUIRED_PARAMETER_EMPTY = "A0410";

    /**
     * 使用者訂單号為空
     */
    public static final String ERROR_CLIENT_ORDER_NUMBER_EMPTY = "A0411";

    /**
     * 訂購數量為空
     */
    public static final String ERROR_CLIENT_ORDER_QUANTITY_EMPTY = "A0412";

    /**
     * 缺少時間戳參數
     */
    public static final String ERROR_CLIENT_TIMESTAMP_PARAMETER_MISSING = "A0413";

    /**
     * 非法的時間戳參數
     */
    public static final String ERROR_CLIENT_INVALID_TIMESTAMP_PARAMETER = "A0414";

    /**
     * 訂單類型不比對
     */
    public static final String ERROR_CLIENT_ORDER_TYPE_MISMATCHING = "A0415";

    /**
     * 産品日庫存不足
     */
    public static final String ERROR_CLIENT_PRODUCT_INVENTORY_SHORTAGE = "A0416";

    /**
     * 統一下單失敗
     */
    public static final String ERROR_CLIENT_ORDER_PLACE_FAIL = "A0417";

    /**
     * 請求參數值超出允許的範圍
     */
    public static final String ERROR_CLIENT_PARAMETER_VALUES_BEYOND_ALLOWED_RANGE = "A0420";

    /**
     * 參數格式不比對
     */
    public static final String ERROR_CLIENT_PARAMETER_FORMAT_NOT_MATCH = "A0421";

    /**
     * 位址不在服務範圍
     */
    public static final String ERROR_CLIENT_ADDRESS_NOT_IN_SERVICE = "A0422";

    /**
     * 時間不在服務範圍
     */
    public static final String ERROR_CLIENT_TIME_NOT_IN_SERVICE = "A0423";

    /**
     * 金額超出限制
     */
    public static final String ERROR_CLIENT_AMOUNT_EXCEEDS_LIMIT = "A0424";

    /**
     * 數量超出限制
     */
    public static final String ERROR_CLIENT_QUANTITY_EXCEEDS_LIMIT = "A0425";

    /**
     * 請求批量處理總個數超出限制
     */
    public static final String ERROR_CLIENT_BATCH_PROCESSING_TOTAL_EXCEEDS_LIMIT = "A0426";

    /**
     * 請求JSON解析失敗
     */
    public static final String ERROR_CLIENT_REQUEST_JSON_PARSING_FAILED = "A0427";

    /**
     * 使用者輸入内容非法
     */
    public static final String ERROR_CLIENT_INPUT_ILLEGAL = "A0430";

    /**
     * 包含違禁敏感詞
     */
    public static final String ERROR_CLIENT_PROHIBITED_SENSITIVE_WORD = "A0431";

    /**
     * 圖檔包含違禁資訊
     */
    public static final String ERROR_CLIENT_IMAGE_PROHIBITED = "A0432";

    /**
     * 檔案侵犯版權
     */
    public static final String ERROR_CLIENT_COPYRIGHT_INFRINGEMENT = "A0433";

    /**
     * 使用者操作異常
     */
    public static final String ERROR_CLIENT_OPERATION_ABNORMAL = "A0440";

    /**
     * 使用者支付逾時
     */
    public static final String ERROR_CLIENT_PAY_OVERTIME = "A0441";

    /**
     * 确認訂單逾時
     */
    public static final String ERROR_CLIENT_ORDER_TIMEOUT = "A0442";

    /**
     * 訂單已關閉
     */
    public static final String ERROR_CLIENT_ORDER_CLOSED = "A0443";

    /**
     * 使用者支付失敗
     */
    public static final String ERROR_CLIENT_PAY_FAIL = "A0444";

    /**
     * 使用者請求服務異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_REQUEST_SERVICE_EXCEPTION = "A0500";

    /**
     * 請求次數超出限制
     */
    public static final String ERROR_CLIENT_REQUESTS_NUMBER_EXCEEDS_LIMIT = "A0501";

    /**
     * 請求并發數超出限制
     */
    public static final String ERROR_CLIENT_REQUESTS_CONCURRENT_NUMBER_EXCEEDS_LIMIT = "A0502";

    /**
     * 使用者操作請等待
     */
    public static final String ERROR_CLIENT_OPERATION_WAIT = "A0503";

    /**
     * WebSocket連接配接異常
     */
    public static final String ERROR_CLIENT_WEBSOCKET_CONNECTION_EXCEPTION = "A0504";

    /**
     * WebSocket連接配接斷開
     */
    public static final String ERROR_CLIENT_WEBSOCKET_CONNECTION_DISCONNECT = "A0505";

    /**
     * 使用者重複請求
     */
    public static final String ERROR_CLIENT_REPEATED_REQUESTS = "A0506";

    /**
     * 使用者資源異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_RESOURCE_EXCEPTION = "A0600";

    /**
     * 賬戶餘額不足
     */
    public static final String ERROR_CLIENT_INSUFFICIENT_ACCOUNT_BALANCE = "A0601";

    /**
     * 使用者磁盤空間不足
     */
    public static final String ERROR_CLIENT_INSUFFICIENT_DISK_SPACE = "A0602";

    /**
     * 使用者記憶體空間不足
     */
    public static final String ERROR_CLIENT_INSUFFICIENT_MEMORY_SPACE = "A0603";

    /**
     * 使用者OSS容量不足
     */
    public static final String ERROR_CLIENT_INSUFFICIENT_OSS_CAPACITY = "A0604";

    /**
     * 使用者配額已用光   螞蟻森林澆水數或每天抽獎數
     */
    public static final String ERROR_CLIENT_QUOTA_EXHAUSTED = "A0605";

    /**
     * 使用者上傳檔案異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_UPLOAD_FILE_EXCEPTION = "A0700";

    /**
     * 使用者上傳檔案類型不比對
     */
    public static final String ERROR_CLIENT_UPLOAD_FILE_TYPE_NOT_MATCH = "A0701";

    /**
     * 使用者上傳檔案太大
     */
    public static final String ERROR_CLIENT_UPLOAD_FILE_TOO_LARGE = "A0702";

    /**
     * 使用者上傳圖檔太大
     */
    public static final String ERROR_CLIENT_UPLOAD_PICTURE_TOO_LARGE = "A0703";

    /**
     * 使用者上傳視訊太大
     */
    public static final String ERROR_CLIENT_UPLOAD_VIDEO_TOO_LARGE = "A0704";

    /**
     * 使用者上傳壓縮檔案太大
     */
    public static final String ERROR_CLIENT_UPLOAD_COMPRESSED_FILE_TOO_LARGE = "A0705";

    /**
     * 使用者目前版本異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_CURRENT_VERSION_ABNORMAL = "A0800";

    /**
     * 使用者安裝版本與系統不比對
     */
    public static final String ERROR_CLIENT_INSTALLED_VERSION_NOT_MATCH = "A0801";

    /**
     * 使用者安裝版本過低
     */
    public static final String ERROR_CLIENT_INSTALLED_VERSION_TOO_LOW = "A0802";

    /**
     * 使用者安裝版本過高
     */
    public static final String ERROR_CLIENT_INSTALLED_VERSION_TOO_HIGH = "A0803";

    /**
     * 使用者安裝版本已過期
     */
    public static final String ERROR_CLIENT_INSTALLED_VERSION_EXPIRED = "A0804";

    /**
     * 使用者API請求版本不比對
     */
    public static final String ERROR_CLIENT_API_VERSION_NOT_MATCH = "A0805";

    /**
     * 使用者API請求版本過高
     */
    public static final String ERROR_CLIENT_API_VERSION_TOO_HIGH = "A0806";

    /**
     * 使用者API請求版本過低
     */
    public static final String ERROR_CLIENT_API_VERSION_TOO_LOW = "A0807";

    /**
     * 使用者隐私未授權   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_PRIVACY_NOT_AUTHORIZED = "A0900";

    /**
     * 使用者隐私未簽署
     */
    public static final String ERROR_CLIENT_PRIVACY_NOT_SIGNED = "A0901";

    /**
     * 使用者攝像頭未授權
     */
    public static final String ERROR_CLIENT_UNAUTHORIZED_CAMERA = "A0902";

    /**
     * 使用者相機未授權
     */
    public static final String ERROR_CLIENT_CAMERA_NOT_AUTHORIZED = "A0903";

    /**
     * 使用者圖檔庫未授權
     */
    public static final String ERROR_CLIENT_UNAUTHORIZED_IMAGE_LIBRARY = "A0904";

    /**
     * 使用者檔案未授權
     */
    public static final String ERROR_CLIENT_UNAUTHORIZED_DOCUMENT = "A0905";

    /**
     * 使用者位置資訊未授權
     */
    public static final String ERROR_CLIENT_UNAUTHORIZED_LOCATION = "A0906";

    /**
     * 使用者通訊錄未授權
     */
    public static final String ERROR_CLIENT_UNAUTHORIZED_ADDRESS_BOOK = "A0907";

    /**
     * 使用者裝置異常   二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_EQUIPMENT_ABNORMAL = "A1000";

    /**
     * 使用者相機異常
     */
    public static final String ERROR_CLIENT_CAMERA_ABNORMAL = "A1001";

    /**
     * 使用者麥克風異常
     */
    public static final String ERROR_CLIENT_MICROPHONE_ABNORMAL = "A1002";

    /**
     * 使用者聽筒異常
     */
    public static final String ERROR_CLIENT_EARPIECE_ABNORMAL = "A1003";

    /**
     * 使用者揚聲器異常
     */
    public static final String ERROR_CLIENT_SPEAKER_ABNORMAL = "A1004";

    /**
     * 使用者GPS定位異常
     */
    public static final String ERROR_CLIENT_GPS_POSITIONING_ABNORMAL = "A1005";

    /**
     * 使用者權限異常 二級宏觀錯誤碼
     */
    public static final String ERROR_CLIENT_PERMISSION = "A1100";

    /**
     * 使用者請求無權限
     */
    public static final String ERROR_CLIENT_PERMISSION_NO_FOUNT = "A1101";

    /**
     * 使用者權限過期
     */
    public static final String ERROR_CLIENT_PERMISSION_TIME_OUT = "A1102";

    /**
     * 使用者權限無效
     */
    public static final String ERROR_CLIENT_PERMISSION_INVALID = "A1103";


    /**
     * 系統執行出錯   一級宏觀錯誤碼
     */
    public static final String ERROR_SYS = "B0001";
    /**
     * 系統執行逾時   二級宏觀錯誤碼
     */
    public static final String ERROR_SYS_RUN_TIME_OUT = "B0100";

    /**
     * 系統訂單處理逾時
     */
    public static final String ERROR_SYS_ORDER_TIME_OUT = "B0101";

    /**
     * 系統資料轉換失敗
     */
    public static final String ERROR_SYS_FAILED_DATA_CONVERT = "B0102";

    /**
     * 資料結構異常
     * <p>相關資料缺失</p>
     * <p>系統不可能出行的資料錯誤,一般由手工修改導緻的錯誤</p>
     */
    public static final String ERROR_SYS_DATA_STRUCTURE = "B0103";

    /**
     * 系統配置參數異常
     * <p>擷取配置參數異常</p>
     */
    public static final String ERROR_SYS_CONF = "B0104";

    /**
     * 系統編碼邏輯
     * <p>1.内部方法調用不符合預期的調用</p>
     */
    public static final String ERROR_SYS_CODE = "B0105";

    /**
     * 系統容災功能被觸發   二級宏觀錯誤碼
     */
    public static final String ERROR_SYS_DISASTER_TRCOVERY_FUNCTION_TRIGGERED = "B0200";

    /**
     * 系統限流
     */
    public static final String ERROR_SYS_CURRENT_LIMITING = "B0210";

    /**
     * 系統功能降級
     */
    public static final String ERROR_SYS_FUNCTIONAL_DEGRADATION = "B0220";


    /**
     * 系統資源異常   二級宏觀錯誤碼
     */
    public static final String ERROR_SYS_RESOURCES_ABNORMAL = "B0300";

    /**
     * 系統資源耗盡
     */
    public static final String ERROR_SYS_RESOURCE_EXHAUSTION = "B0310";

    /**
     * 系統磁盤空間耗盡
     */
    public static final String ERROR_SYS_OUT_OF_DISK_SPACE = "B0311";

    /**
     * 系統記憶體耗盡
     */
    public static final String ERROR_SYS_OUT_OF_MEMORY = "B0312";

    /**
     * 檔案句柄耗盡
     */
    public static final String ERROR_SYS_FILE_HANDLE_EXHAUSTED = "B0313";

    /**
     * 系統連接配接池耗盡
     */
    public static final String ERROR_SYS_CONNECTION_POOL_DEPLETION = "B0314";

    /**
     * 系統線程池耗盡
     */
    public static final String ERROR_SYS_THREAD_POOL_DEPLETION = "B0315";

    /**
     * 系統資源通路異常
     */
    public static final String ERROR_SYS_RESOURCE_ACCESS_EXCEPTION = "B0320";

    /**
     * 系統讀取磁盤檔案失敗
     */
    public static final String ERROR_SYS_FAILED_READ_DISK_FILE = "B0321";

    /**
     * 系統執行SQL出錯
     */
    public static final String ERROR_SYS_RUN_SQL = "B0322";

    /**
     * 請求404,無相關服務
     */
    public static final String ERROR_SYS_ACTION_NOT_FOUND = "B0341";

    /**
     * 系統請求未定義權限标記,參考權限标記 LuTagPermission
     *
     * @see com.lucun.wltour.common.permission.LuTagPermission
     */
    public static final String ERROR_SYS_PERMISSION_ACTION_NO = "B0342";


    /**
     * 系統參數異常
     */
    public static final String ERROR_SYS_PARAM = "B0400";

    /**
     * 系統配置參數禁用
     */
    public static final String ERROR_SYS_PARAM_CONFIG_DISABLE = "B0401";

    /**
     * 系統配置參數為空
     */
    public static final String ERROR_SYS_PARAM_CONFIG_EMPTY = "B0402";

    /**
     * 系統配置參數類型錯誤
     */
    public static final String ERROR_SYS_PARAM_CONFIG_TYPE = "B0403";
    /**
     * 系統配置參數類型過小
     */
    public static final String ERROR_SYS_PARAM_CONFIG_SMALL = "B0404";

    /**
     * 系統配置參數類型過大
     */
    public static final String ERROR_SYS_PARAM_CONFIG_BIG = "B0405";

    /**
     * 調用第三方服務出錯 一級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE = "C0001";

    /**
     * 中間件服務出錯 二級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE_MIDDLEWARE = "C0100";

    /**
     * RPC服務出錯
     */
    public static final String ERROR_REMOTE_RPC = "C0110";

    /**
     * RPC服務未找到
     */
    public static final String ERROR_REMOTE_RPC_NOT_FOUND = "C0111";

    /**
     * RPC服務未注冊
     */
    public static final String ERROR_REMOTE_RPC_NOT_REGISTER = "C0112";

    /**
     * 接口不存在
     */
    public static final String ERROR_REMOTE_API_NOT_REGISTER = "C0113";

    /**
     * 消息服務出錯
     */
    public static final String ERROR_REMOTE_MESSAGE_SERVICE_ERROR = "C0120";

    /**
     * 消息投遞出錯
     */
    public static final String ERROR_REMOTE_MESSAGE_DELIVERY_ERROR = "C0121";

    /**
     * 消息消費出錯
     */
    public static final String ERROR_REMOTE_MESSAGE_CONSUMPTION_ERROR = "C0122";

    /**
     * 消息訂閱出錯
     */
    public static final String ERROR_REMOTE_MESSAGE_SUBSCRIPTION_ERROR = "C0123";

    /**
     * 消息分組未查到
     */
    public static final String ERROR_REMOTE_MESSAGE_GROUPING_NOT_FOUND = "C0124";

    /**
     * 緩存服務出錯
     */
    public static final String ERROR_REMOTE_CACHE_SERVICE_ERROR = "C0130";

    /**
     * key長度超過限制
     */
    public static final String ERROR_REMOTE_KEY_LENGTH_OVER_LIMIT = "C0131";

    /**
     * value長度超過限制
     */
    public static final String ERROR_REMOTE_VALUE_LENGTH_OVER_LIMIT = "C0132";

    /**
     * 存儲容量已滿
     */
    public static final String ERROR_REMOTE_STORAGE_CAPACITY_FULL = "C0133";

    /**
     * 不支援的資料格式
     */
    public static final String ERROR_REMOTE_UNSUPPORTED_DATA_FORMATS = "C0134";

    /**
     * 配置服務出錯
     */
    public static final String ERROR_REMOTE_CONFIGURATION_SERVICE_ERROR = "C0140";

    /**
     * 網絡資源服務出錯
     */
    public static final String ERROR_REMOTE_NETWORK_RESOURCE_SERVICE_ERROR = "C0150";

    /**
     * VPN服務出錯
     */
    public static final String ERROR_REMOTE_VPN_SERVICE_ERROR = "C0151";

    /**
     * CDN服務出錯
     */
    public static final String ERROR_REMOTE_CDN_SERVICE_ERROR = "C0152";

    /**
     * 域名解析服務出錯
     */
    public static final String ERROR_REMOTE_DOMAIN_NAME_RESOLUTION_SERVICE_ERROR = "C0153";

    /**
     * 網關服務出錯
     */
    public static final String ERROR_REMOTE_GATEWAY_SERVICE_ERROR = "C0154";

    /**
     * 第三方系統執行逾時   二級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE_THIRD_PARTY_SYSTEM_EXECUTION_TIMEOUT = "C0200";

    /**
     * RPC執行逾時
     */
    public static final String ERROR_REMOTE_RPC_TIMEOUTS = "C0210";

    /**
     * 消息投遞逾時
     */
    public static final String ERROR_REMOTE_MESSAGE_DELIVERY_TIMEOUT = "C0220";

    /**
     * 緩存服務逾時
     */
    public static final String ERROR_REMOTE_CACHE_SERVICE_TIMEOUT = "C0230";

    /**
     * 配置服務逾時
     */
    public static final String ERROR_REMOTE_CONFIGURE_SERVICE_TIMEOUT = "C0240";

    /**
     * 資料庫服務逾時
     */
    public static final String ERROR_REMOTE_DATABASE_SERVICE_TIMEOUT = "C0250";

    /**
     * 資料庫服務出錯   二級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE_DATABASE_SERVICE_ERROR = "C0300";

    /**
     * 表不存在
     */
    public static final String ERROR_REMOTE_TABLE_DOES_NOT_EXIST = "C0311";

    /**
     * 列不存在
     */
    public static final String ERROR_REMOTE_COLUMN_DOES_NOT_EXIST = "C0312";

    /**
     * 多表關聯中存在多個相同名稱的列
     */
    public static final String ERROR_REMOTE_MULTIPLE_COLUMNS_WITH_THE_SAMENAME = "C0321";

    /**
     * 資料庫死鎖
     */
    public static final String ERROR_REMOTE_DATABASE_DEADLOCK = "C0331";

    /**
     * 主鍵沖突
     */
    public static final String ERROR_REMOTE_PRIMARY_KEY_CONFLICT = "C0341";

    /**
     * 第三方容災系統被觸發  二級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE_THIRD_PARTY_DISASTER_TRCOVERY_SYSTEM_TRIGGERED = "C0400";

    /**
     * 第三方系統限流
     */
    public static final String ERROR_REMOTE_THIRD_PARTY_SYSTEMS_ARE_CURRENT_LIMITING = "C0401";

    /**
     * 第三方功能降級
     */
    public static final String ERROR_REMOTE_THIRD_PARTY_FUNCTION_DEGRADATION = "C0402";

    /**
     * 通知服務出錯   二級宏觀錯誤碼
     */
    public static final String ERROR_REMOTE_NOTIFICATION_SERVICE_ERROR = "C0500";

    /**
     * 短信提醒服務失敗
     */
    public static final String ERROR_REMOTE_SMS_ALERT_SERVICE_FAIL = "C0501";

    /**
     * 語音提醒服務失敗
     */
    public static final String ERROR_REMOTE_VOICE_REMINDER_SERVICE_FAIL = "C0502";

    /**
     * 郵件提醒服務失敗
     */
    public static final String ERROR_REMOTE_MAIL_REMINDER_SERVICE_FAILED = "C0503";


    @Override
    public String getName(String val) {
        if (StringUtils.isBlank(val)) {
            return "";
        }
        switch (val) {
            case SUCCESS:
                return "成功";
            case ERROR_CLIENT:
                return "使用者端錯誤";
            case ERROR_CLIENT_REGISTER:
                return "使用者注冊錯誤";
            case ERROR_CLIENT_NOT_AGREE:
                return "使用者未同意隐私協定";
            case ERROR_CLIENT_REGION_LIMIT:
                return "注冊國家或地區受限";
            case ERROR_CLIENT_USERNAME_FAIL:
                return "使用者名校驗失敗";
            case ERROR_CLIENT_USERNAME_EXISTS:
                return "使用者名已存在";
            case ERROR_CLIENT_ILLEGAL_WORD:
                return "使用者名包含敏感詞";
            case ERROR_CLIENT_SPECIAL_CHARACTER:
                return "使用者名包含特殊字元";
            case ERROR_CLIENT_PASSWORD_FAIL:
                return "密碼校驗失敗";
            case ERROR_CLIENT_PASSWORD_LENGTH_NOT_ENOUGH:
                return "密碼長度不夠";
            case ERROR_CLIENT_PASSWORD_STRENGTH_NOT_ENOUGH:
                return "密碼強度不夠";
            case ERROR_CLIENT_CHECKCODE_INPUT_ERROR:
                return "校驗碼輸入錯誤";
            case ERROR_CLIENT_SMS_CHECKCODE_INPUT_ERROR:
                return "短信校驗碼輸入錯誤";
            case ERROR_CLIENT_EMAIL_CHECKCODE_INPUT_ERROR:
                return "郵件校驗碼輸入錯誤";
            case ERROR_CLIENT_VOICE_CHECKCODE_INPUT_ERROR:
                return "語音校驗碼輸入錯誤";
            case ERROR_CLIENT_CERTIFICATE_ABNORMAL:
                return "使用者證件異常";
            case ERROR_CLIENT_CERTIFICATE_TYPE_UNSELECTED:
                return "使用者證件類型未選擇";
            case ERROR_CLIENT_IDCARD_ILLEGAL:
                return "大陸身份證編号校驗非法";
            case ERROR_CLIENT_PASSPORT_ILLEGAL:
                return "護照編号校驗非法";
            case ERROR_CLIENT_MILITARY_ID_NUMBER_ILLEGAL:
                return "軍官證編号校驗非法";
            case ERROR_CLIENT_BASIC_INFORMATION_FAIL:
                return "使用者基本資訊校驗失敗";
            case ERROR_CLIENT_PHONE_FORMAT_FAIL:
                return "手機格式校驗失敗";
            case ERROR_CLIENT_ADDRESS_FORMAT_FAIL:
                return "位址格式校驗失敗";
            case ERROR_CLIENT_EMAIL_FORMAT_FAIL:
                return "郵箱格式校驗失敗";
            case ERROR_CLIENT_LOGIN_ABNORMAL:
                return "使用者登入異常";
            case ERROR_CLIENT_ACCOUNT_NOTEXIST:
                return "使用者賬戶不存在";
            case ERROR_CLIENT_ACCOUNT_FREEZE:
                return "使用者賬戶被當機";
            case ERROR_CLIENT_ACCOUNT_INVALID:
                return "使用者賬戶已廢棄";
            case ERROR_CLIENT_PASSWORD_ERROR:
                return "使用者密碼錯誤";
            case ERROR_CLIENT_PASSWORD_ERROR_TIMES_OVERRUN:
                return "使用者輸入密碼錯誤次數超限";
            case ERROR_CLIENT_IDENTITY_FILE:
                return "使用者身份校驗失敗";
            case ERROR_CLIENT_FINGERPRINT_FILE:
                return "使用者指紋識别失敗";
            case ERROR_CLIENT_COUNTENANCE_FILE:
                return "使用者面容識别失敗";
            case ERROR_CLIENT_NO_LOGIN_AUTHORIZATION:
                return "使用者未獲得第三方登入授權";
            case ERROR_CLIENT_LOGIN_EXPIRED:
                return "使用者登入已過期";
            case ERROR_CLIENT_CHECKCODE_ERROR:
                return "使用者驗證碼錯誤";
            case ERROR_CLIENT_CHECKCODE_TIMES_OVERRUN:
                return "使用者驗證碼嘗試次數超限";
            case ERROR_CLIENT_ACCESS_EXCEPTION:
                return "通路權限異常";
            case ERROR_CLIENT_ACCESS_UNAUTHORIZED:
                return "通路未授權";
            case ERROR_CLIENT_ACCESS_AUTHORIZING:
                return "正在授權中";
            case ERROR_CLIENT_REJECTED_AUTHORIZATION:
                return "使用者授權申請被拒絕";
            case ERROR_CLIENT_ACCESS_PRIVACY_SETTINGS_BLOCKED:
                return "因通路對象隐私設定被攔截";
            case ERROR_CLIENT_AUTHORIZATION_EXPIRED:
                return "授權已過期";
            case ERROR_CLIENT_NO_PROMISSIONS_TO_API:
                return "無權限使用API";
            case ERROR_CLIENT_ACCESS_BLOCKED:
                return "使用者通路被攔截";
            case ERROR_CLIENT_BLACKLIST_USERS:
                return "黑名單使用者";
            case ERROR_CLIENT_ACCOUNT_IS_FROZEN:
                return "賬号被當機";
            case ERROR_CLIENT_ILLEGAL_IP_ADDRESS:
                return "非法IP位址";
            case ERROR_CLIENT_GATEWAY_ACCESS_RESTRICTED:
                return "網關通路受限";
            case ERROR_CLIENT_REGIONAL_BLACKLIST:
                return "地域黑名單";
            case ERROR_CLIENT_SERVICE_ARREARS:
                return "服務已欠費";
            case ERROR_CLIENT_SIGNATURE_EXCEPTION:
                return "使用者簽名異常";
            case ERROR_CLIENT_RSA_SIGNATURE_ERROR:
                return "RSA簽名錯誤";
            case ERROR_CLIENT_REQUEST_PARAMETER_ERROR:
                return "使用者請求參數錯誤";
            case ERROR_CLIENT_ILLEGAL_MALICIOUS_LINKS:
                return "包含非法惡意跳轉連結";
            case ERROR_CLIENT_INVALID_INPUT:
                return "無效的使用者輸入";
            case ERROR_CLIENT_REQUIRED_PARAMETER_EMPTY:
                return "請求必填參數為空";
            case ERROR_CLIENT_ORDER_NUMBER_EMPTY:
                return "使用者訂單号為空";
            case ERROR_CLIENT_ORDER_QUANTITY_EMPTY:
                return "訂購數量為空";
            case ERROR_CLIENT_TIMESTAMP_PARAMETER_MISSING:
                return "缺少時間戳參數";
            case ERROR_CLIENT_INVALID_TIMESTAMP_PARAMETER:
                return "非法的時間戳參數";
            case ERROR_CLIENT_PARAMETER_VALUES_BEYOND_ALLOWED_RANGE:
                return "請求參數值超出允許的範圍";
            case ERROR_CLIENT_PARAMETER_FORMAT_NOT_MATCH:
                return "參數格式不比對";
            case ERROR_CLIENT_ADDRESS_NOT_IN_SERVICE:
                return "位址不在服務範圍";
            case ERROR_CLIENT_TIME_NOT_IN_SERVICE:
                return "時間不在服務範圍";
            case ERROR_CLIENT_AMOUNT_EXCEEDS_LIMIT:
                return "金額超出限制";
            case ERROR_CLIENT_QUANTITY_EXCEEDS_LIMIT:
                return "數量超出限制";
            case ERROR_CLIENT_BATCH_PROCESSING_TOTAL_EXCEEDS_LIMIT:
                return "請求批量處理總個數超出限制";
            case ERROR_CLIENT_REQUEST_JSON_PARSING_FAILED:
                return "請求JSON解析失敗";
            case ERROR_CLIENT_INPUT_ILLEGAL:
                return "使用者輸入内容非法";
            case ERROR_CLIENT_PROHIBITED_SENSITIVE_WORD:
                return "包含違禁敏感詞";
            case ERROR_CLIENT_IMAGE_PROHIBITED:
                return "圖檔包含違禁資訊";
            case ERROR_CLIENT_COPYRIGHT_INFRINGEMENT:
                return "檔案侵犯版權";
            case ERROR_CLIENT_OPERATION_ABNORMAL:
                return "使用者操作異常";
            case ERROR_CLIENT_PAY_OVERTIME:
                return "使用者支付逾時";
            case ERROR_CLIENT_PAY_FAIL:
                return "使用者支付失敗";
            case ERROR_CLIENT_ORDER_TIMEOUT:
                return "确認訂單逾時";
            case ERROR_CLIENT_ORDER_CLOSED:
                return "訂單已關閉";
            case ERROR_CLIENT_ORDER_TYPE_MISMATCHING:
                return "訂單類型不比對";
            case ERROR_CLIENT_PRODUCT_INVENTORY_SHORTAGE:
                return "産品日庫存不足";
            case ERROR_CLIENT_ORDER_PLACE_FAIL:
                return "統一下單失敗";
            case ERROR_CLIENT_REQUEST_SERVICE_EXCEPTION:
                return "使用者請求服務異常";
            case ERROR_CLIENT_REQUESTS_NUMBER_EXCEEDS_LIMIT:
                return "請求次數超出限制";
            case ERROR_CLIENT_REQUESTS_CONCURRENT_NUMBER_EXCEEDS_LIMIT:
                return "請求并發數超出限制";
            case ERROR_CLIENT_OPERATION_WAIT:
                return "使用者操作請等待";
            case ERROR_CLIENT_WEBSOCKET_CONNECTION_EXCEPTION:
                return "WebSocket連接配接異常";
            case ERROR_CLIENT_WEBSOCKET_CONNECTION_DISCONNECT:
                return "WebSocket連接配接斷開";
            case ERROR_CLIENT_REPEATED_REQUESTS:
                return "使用者重複請求";
            case ERROR_CLIENT_RESOURCE_EXCEPTION:
                return "使用者資源異常";
            case ERROR_CLIENT_INSUFFICIENT_ACCOUNT_BALANCE:
                return "賬戶餘額不足";
            case ERROR_CLIENT_INSUFFICIENT_DISK_SPACE:
                return "使用者磁盤空間不足";
            case ERROR_CLIENT_INSUFFICIENT_MEMORY_SPACE:
                return "使用者記憶體空間不足";
            case ERROR_CLIENT_INSUFFICIENT_OSS_CAPACITY:
                return "使用者OSS容量不足";
            case ERROR_CLIENT_QUOTA_EXHAUSTED:
                return "使用者配額已用光";
            case ERROR_CLIENT_UPLOAD_FILE_EXCEPTION:
                return "使用者上傳檔案異常";
            case ERROR_CLIENT_UPLOAD_FILE_TYPE_NOT_MATCH:
                return "使用者上傳檔案類型不比對";
            case ERROR_CLIENT_UPLOAD_FILE_TOO_LARGE:
                return "使用者上傳檔案太大";
            case ERROR_CLIENT_UPLOAD_PICTURE_TOO_LARGE:
                return "使用者上傳圖檔太大";
            case ERROR_CLIENT_UPLOAD_VIDEO_TOO_LARGE:
                return "使用者上傳視訊太大";
            case ERROR_CLIENT_UPLOAD_COMPRESSED_FILE_TOO_LARGE:
                return "使用者上傳壓縮檔案太大";
            case ERROR_CLIENT_CURRENT_VERSION_ABNORMAL:
                return "使用者目前版本異常";
            case ERROR_CLIENT_INSTALLED_VERSION_NOT_MATCH:
                return "使用者安裝版本與系統不比對";
            case ERROR_CLIENT_INSTALLED_VERSION_TOO_LOW:
                return "使用者安裝版本過低";
            case ERROR_CLIENT_INSTALLED_VERSION_TOO_HIGH:
                return "使用者安裝版本過高";
            case ERROR_CLIENT_INSTALLED_VERSION_EXPIRED:
                return "使用者安裝版本已過期";
            case ERROR_CLIENT_API_VERSION_NOT_MATCH:
                return "使用者API請求版本不比對";
            case ERROR_CLIENT_API_VERSION_TOO_HIGH:
                return "使用者API請求版本過高";
            case ERROR_CLIENT_API_VERSION_TOO_LOW:
                return "使用者API請求版本過低";
            case ERROR_CLIENT_PRIVACY_NOT_AUTHORIZED:
                return "使用者隐私未授權";
            case ERROR_CLIENT_PRIVACY_NOT_SIGNED:
                return "使用者隐私未簽署";
            case ERROR_CLIENT_UNAUTHORIZED_CAMERA:
                return "使用者攝像頭未授權";
            case ERROR_CLIENT_CAMERA_NOT_AUTHORIZED:
                return "使用者相機未授權";
            case ERROR_CLIENT_UNAUTHORIZED_IMAGE_LIBRARY:
                return "使用者圖檔庫未授權";
            case ERROR_CLIENT_UNAUTHORIZED_DOCUMENT:
                return "使用者檔案未授權";
            case ERROR_CLIENT_UNAUTHORIZED_LOCATION:
                return "使用者位置資訊未授權";
            case ERROR_CLIENT_UNAUTHORIZED_ADDRESS_BOOK:
                return "使用者通訊錄未授權";
            case ERROR_CLIENT_EQUIPMENT_ABNORMAL:
                return "使用者裝置異常";
            case ERROR_CLIENT_CAMERA_ABNORMAL:
                return "使用者相機異常";
            case ERROR_CLIENT_MICROPHONE_ABNORMAL:
                return "使用者麥克風異常";
            case ERROR_CLIENT_EARPIECE_ABNORMAL:
                return "使用者聽筒異常";
            case ERROR_CLIENT_SPEAKER_ABNORMAL:
                return "使用者揚聲器異常";
            case ERROR_CLIENT_GPS_POSITIONING_ABNORMAL:
                return "使用者GPS定位異常";
            case ERROR_CLIENT_PERMISSION:
                return "使用者權限異常";
            case ERROR_CLIENT_PERMISSION_NO_FOUNT:
                return "使用者無相關權限";
            case ERROR_CLIENT_PERMISSION_TIME_OUT:
                return "使用者權限過期";
            case ERROR_CLIENT_PERMISSION_INVALID:
                return "使用者權限無效";

            case ERROR_SYS:
                return "系統錯誤";
            case ERROR_SYS_RUN_TIME_OUT:
                return "系統執行逾時";
            case ERROR_SYS_ORDER_TIME_OUT:
                return "系統訂單處理逾時";
            case ERROR_SYS_DISASTER_TRCOVERY_FUNCTION_TRIGGERED:
                return "系統容災功能被觸發";
            case ERROR_SYS_CURRENT_LIMITING:
                return "系統限流";
            case ERROR_SYS_FUNCTIONAL_DEGRADATION:
                return "系統功能降級";
            case ERROR_SYS_RESOURCES_ABNORMAL:
                return "系統資源異常";
            case ERROR_SYS_RESOURCE_EXHAUSTION:
                return "系統資源耗盡";
            case ERROR_SYS_OUT_OF_DISK_SPACE:
                return "系統磁盤空間耗盡";
            case ERROR_SYS_OUT_OF_MEMORY:
                return "系統記憶體耗盡";
            case ERROR_SYS_FILE_HANDLE_EXHAUSTED:
                return "檔案句柄耗盡";
            case ERROR_SYS_CONNECTION_POOL_DEPLETION:
                return "系統連接配接池耗盡";
            case ERROR_SYS_THREAD_POOL_DEPLETION:
                return "系統線程池耗盡";
            case ERROR_SYS_RESOURCE_ACCESS_EXCEPTION:
                return "系統資源通路異常";
            case ERROR_SYS_FAILED_READ_DISK_FILE:
                return "系統讀取磁盤檔案失敗";
            case ERROR_SYS_FAILED_DATA_CONVERT:
                return "資料轉換失敗";
            case ERROR_SYS_DATA_STRUCTURE:
                return "資料結構異常";
            case ERROR_SYS_CONF:
                return "系統參數異常";
            case ERROR_SYS_CODE:
                return "系統編碼異常";
            case ERROR_SYS_ACTION_NOT_FOUND:
                return "未找到相關請求";
            case ERROR_SYS_PERMISSION_ACTION_NO:
                return "系統請求未定義權限标記";

            case ERROR_SYS_PARAM:
                return "系統參數異常";
            case ERROR_SYS_PARAM_CONFIG_DISABLE:
                return "系統配置參數禁用";
            case ERROR_SYS_PARAM_CONFIG_EMPTY:
                return "系統配置參數為空";
            case ERROR_SYS_PARAM_CONFIG_TYPE:
                return "系統配置參數類型錯誤";
            case ERROR_SYS_PARAM_CONFIG_SMALL:
                return "系統配置參數過小";
            case ERROR_SYS_PARAM_CONFIG_BIG:
                return "系統配置參數過大";

            case ERROR_REMOTE:
                return "第三方服務錯誤";
            case ERROR_REMOTE_MIDDLEWARE:
                return "中間件服務出錯";
            case ERROR_REMOTE_RPC:
                return "RPC服務出錯";
            case ERROR_REMOTE_RPC_NOT_FOUND:
                return "RPC服務未找到";
            case ERROR_REMOTE_RPC_NOT_REGISTER:
                return "RPC服務未注冊";
            case ERROR_REMOTE_API_NOT_REGISTER:
                return "接口不存在";
            case ERROR_REMOTE_MESSAGE_SERVICE_ERROR:
                return "消息服務出錯";
            case ERROR_REMOTE_MESSAGE_DELIVERY_ERROR:
                return "消息投遞出錯";
            case ERROR_REMOTE_MESSAGE_CONSUMPTION_ERROR:
                return "消息消費出錯";
            case ERROR_REMOTE_MESSAGE_SUBSCRIPTION_ERROR:
                return "消息訂閱出錯";
            case ERROR_REMOTE_MESSAGE_GROUPING_NOT_FOUND:
                return "消息分組未查到";
            case ERROR_REMOTE_CACHE_SERVICE_ERROR:
                return "緩存服務出錯";
            case ERROR_REMOTE_KEY_LENGTH_OVER_LIMIT:
                return "key長度超過限制";
            case ERROR_REMOTE_VALUE_LENGTH_OVER_LIMIT:
                return "value長度超過限制";
            case ERROR_REMOTE_STORAGE_CAPACITY_FULL:
                return "存儲容量已滿";
            case ERROR_REMOTE_UNSUPPORTED_DATA_FORMATS:
                return "不支援的資料格式";
            case ERROR_REMOTE_CONFIGURATION_SERVICE_ERROR:
                return "配置服務出錯";
            case ERROR_REMOTE_NETWORK_RESOURCE_SERVICE_ERROR:
                return "網絡資源服務出錯";
            case ERROR_REMOTE_VPN_SERVICE_ERROR:
                return "VPN服務出錯";
            case ERROR_REMOTE_CDN_SERVICE_ERROR:
                return "CDN服務出錯";
            case ERROR_REMOTE_DOMAIN_NAME_RESOLUTION_SERVICE_ERROR:
                return "域名解析服務出錯";
            case ERROR_REMOTE_GATEWAY_SERVICE_ERROR:
                return "網關服務出錯";
            case ERROR_REMOTE_THIRD_PARTY_SYSTEM_EXECUTION_TIMEOUT:
                return "第三方系統執行逾時";
            case ERROR_REMOTE_RPC_TIMEOUTS:
                return "RPC執行逾時";
            case ERROR_REMOTE_MESSAGE_DELIVERY_TIMEOUT:
                return "消息投遞逾時";
            case ERROR_REMOTE_CACHE_SERVICE_TIMEOUT:
                return "緩存服務逾時";
            case ERROR_REMOTE_CONFIGURE_SERVICE_TIMEOUT:
                return "配置服務逾時";
            case ERROR_REMOTE_DATABASE_SERVICE_TIMEOUT:
                return "資料庫服務逾時";
            case ERROR_REMOTE_DATABASE_SERVICE_ERROR:
                return "資料庫服務出錯";
            case ERROR_REMOTE_TABLE_DOES_NOT_EXIST:
                return "表不存在";
            case ERROR_REMOTE_COLUMN_DOES_NOT_EXIST:
                return "列不存在";
            case ERROR_REMOTE_MULTIPLE_COLUMNS_WITH_THE_SAMENAME:
                return "多表關聯中存在多個相同名稱的列";
            case ERROR_REMOTE_DATABASE_DEADLOCK:
                return "資料庫死鎖";
            case ERROR_REMOTE_PRIMARY_KEY_CONFLICT:
                return "主鍵沖突";
            case ERROR_REMOTE_THIRD_PARTY_DISASTER_TRCOVERY_SYSTEM_TRIGGERED:
                return "第三方容災系統被觸發";
            case ERROR_REMOTE_THIRD_PARTY_SYSTEMS_ARE_CURRENT_LIMITING:
                return "第三方系統限流";
            case ERROR_REMOTE_THIRD_PARTY_FUNCTION_DEGRADATION:
                return "第三方功能降級";
            case ERROR_REMOTE_NOTIFICATION_SERVICE_ERROR:
                return "通知服務出錯'";
            case ERROR_REMOTE_SMS_ALERT_SERVICE_FAIL:
                return "短信提醒服務失敗";
            case ERROR_REMOTE_VOICE_REMINDER_SERVICE_FAIL:
                return "語音提醒服務失敗";
            case ERROR_REMOTE_MAIL_REMINDER_SERVICE_FAILED:
                return "郵件提醒服務失敗";
            default:
                return "";
        }
    }
}

           

JwtUtils

package com.example.hotelmanagement.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.hotelmanagement.model.UserInfo;

import java.util.Date;

public class JwtUtils {
    /*
    過期時間為24小時,毫秒計時的---毫秒--》秒--》分--》小時--》天
     */
    private static final long EXPIRE_TIME= 60 * 24 * 60 * 1000;
    /**
     * 密鑰,注意這裡如果真實用到,應當設定到複雜點,相當于私鑰的存在。如果被人拿到,相當于它可以自己制造token了。
     */
    private static final String TOKEN_SECRET="token-xly";  //密鑰鹽
    /**
     * 簽名生成
     * @param user
     * @return
     */
    public static String sign(UserInfo user){
        String token = null;
        try {
            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
            token = JWT.create()
                    .withIssuer("xu")//自定義的
                    .withClaim("username", user.getPhone())
                    .withExpiresAt(expiresAt)
                    // 使用了HMAC256加密算法。
                    .sign(Algorithm.HMAC256(TOKEN_SECRET));
        } catch (Exception e){
            e.printStackTrace();
        }
        return token;
    }
    /**
     * 簽名驗證h
     * @param token
     * @return
     */
    public static boolean verify(String token){
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("xu").build();//自定義的
            DecodedJWT jwt = verifier.verify(token);
            System.out.println("認證通過:");
            System.out.println("issuer: " + jwt.getIssuer());
            System.out.println("username: " + jwt.getClaim("username").asString());
            System.out.println("過期時間:" + jwt.getExpiresAt());
            return true;
        } catch (Exception e){

            return false;
        }
    }
}

           

TokenUtil

package com.example.hotelmanagement.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.hotelmanagement.model.UserInfo;
import com.example.hotelmanagement.utils.common.BaseException;
import com.example.hotelmanagement.utils.common.ConstantResultCode;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TokenUtil {
    /*
        過期時間為24小時,毫秒計時的---毫秒--》秒--》分--》小時--》天
        private static final long EXPIRE_TIME= 60 * 24 * 60 * 1000;
     */
    /**
     * 過期時間為一分鐘
     */
    private static final long EXPIRE_TIME = 1000 * 60 * 60 * 24;

    /**
     * 密鑰,注意這裡如果真實用到,應當設定到複雜點,相當于私鑰的存在。如果被人拿到,相當于它可以自己制造token了。
     */
    private static final String TOKEN_SECRET = "token-lx";  //密鑰鹽

    /**
     * 簽名生成
     *
     * @param userInfo
     * @return
     */
    public static String sign(UserInfo userInfo) {

        String token = null;
        try {
            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
            token = JWT.create()
                    .withClaim("id", userInfo.getId())
                    .withClaim("phone", userInfo.getPhone())
                    .withClaim("status", userInfo.getStatus())
                    .withExpiresAt(expiresAt)
                    // 使用了HMAC256加密算法。
                    .sign(Algorithm.HMAC256(TOKEN_SECRET));

        } catch (Exception e) {
            e.printStackTrace();
        }
        return token;
    }

    /**
     * 簽名驗證
     *
     * @param token
     * @return
     */
    public static boolean verify(String token) {
        if (StringUtils.isBlank(token)) {
            throw new BaseException(ConstantResultCode.ERROR_CLIENT_REQUIRED_PARAMETER_EMPTY, "token為空");
        }
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).build();//自定義的
            DecodedJWT jwt = verifier.verify(token);
            System.out.println("認證通過:");
            System.out.println("id: " + jwt.getClaim("id").asInt());
            System.out.println("phone: " + jwt.getClaim("phone").asString());
//            System.out.println("role: " + jwt.getClaim("role").asString());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("過期時間:" + sdf.format(jwt.getExpiresAt()));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * <p> 獲得權限 </p>
     *
     * @Param [request]
     * @Return java.lang.String
     */
    public static String getRoleByToken(HttpServletRequest request) {
        String token = request.getHeader("token");
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim("status").asString();
    }

    /**
     * <p> 獲得id,操作人 </p>
     *
     * @Param [request]
     * @Return java.lang.String
     */
    public static int getIdByToken(HttpServletRequest request) {
        String token = request.getHeader("token");
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim("id").asInt();
    }
}