SpringBoot实现请求拦截(@Aspect切面类和自定义拦截器)

第一种(@Aspect切面类)

package com.gx.interceptor;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

@Aspect
@Component
@AllArgsConstructor
@Slf4j
public class AuthorityHandlerAspect {


    @Pointcut("execution(* com.gx.controller.*.*(..))")
    public void executeService() {
    }

    @Around("executeService()")
    public Object authorityHandler(ProceedingJoinPoint pjp) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
        Method method = methodSignature.getMethod();
        //if (method.isAnnotationPresent(OperationLogAnnotation.class)) {//判断是否该类有此注解
        //}
        log.info("method{}",method);
        System.out.println("!!!!!!!!!!!!!!!!!已被拦截");
        return pjp.proceed();
    }


}

第二种(自定义拦截器类)

第一步
package
com.chitic.bank.web.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class CrossDomainInterceptor extends HandlerInterceptorAdapter{
  /**
  *
在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
  */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }

    @Override
    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
    }

  /**
  *
请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
  */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
    }

   /**
    *在请求处理之前进行调用(Controller方法调用之前)
   **/
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
            if (request.getHeader(HttpHeaders.ORIGIN) != null) {
                
                response.setHeader("Access-Control-Allow-Origin", "*");
                response.setHeader("Access-Control-Allow-Methods", "POST, GET");
                response.setHeader("Access-Control-Allow-Headers", "token,Content-Type");
                response.setHeader("Access-Control-Expose-Headers", "token");
            }
           return true;
    }
        
}

第二步:注册自定义拦截器
package com.chitic.bank.web.config;

import com.chitic.bank.web.interceptor.CrossDomainInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class CustomWebConfig extends WebMvcConfigurerAdapter {

@Order(1) //作用,值越小,越优先执行
@Bean
@ConditionalOnMissingBean(CrossDomainInterceptor.class)
public CrossDomainInterceptor crossDomainInterceptor() {
return new CrossDomainInterceptor();
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
registry.addInterceptor(crossDomainInterceptor());
}

}


猜你喜欢

转载自www.cnblogs.com/gaomanito/p/10683906.html