java.lang.reflect.UndeclaredThrowableException的解決
阿新 • • 發佈:2022-05-25
[轉] 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 )