1. 程式人生 > 其它 >java.lang.reflect.UndeclaredThrowableException的解決

java.lang.reflect.UndeclaredThrowableException的解決

[轉] https://www.jianshu.com/p/7edab536e4b9

前言

這2天開始寫web介面,由於專案後端就我一個人,寫起來比較慢。,遇到好多奇怪的問題,也基本只能一個人去解決。今天下午給這個問題坑了半天。現在腦殼子還疼。

問題

業務上需要實現一個功能,攔截請求的引數。檢查是否包含token。專案是基於springmvc來實現的,這裡很自然使用 spring 切面技術。攔截所有controller的請求,然後檢查是否攜帶了token引數。如果沒攜帶,則拋一個自定義異常。再呼叫 統一異常處理類來處理。
涉及的類如下:

package com.insigmaunited.lightai.base;

import com.insigmaunited.lightai.exception.TokenEmptyException;
import com.insigmaunited.lightai.result.Response;
import com.insigmaunited.lightai.util.StringUtil;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 許可權攔截AOP
 * @author Administrator
 *
 */
@Component
@Aspect
public class PermissionAop {

    private final Logger logger = LoggerFactory.getLogger(PermissionAop.class);

    // 定義切點Pointcut
    @Pointcut("execution(* com.insigmaunited.lightai.controller.*Controller.*(..))")
    public void pointCut(){}

    @Before("pointCut()")
    public void before() throws Throwable {
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
        HttpServletRequest request = sra.getRequest();

        String url = request.getRequestURL().toString();
        String method = request.getMethod();
        String uri = request.getRequestURI();
        String queryString = request.getQueryString();
        System.out.println(url);
        System.out.println(method);
        System.out.println(uri);
        System.out.println(queryString);

        if (StringUtil.isNotEmpty(queryString) && queryString.indexOf("token") != -1 )