zoukankan      html  css  js  c++  java
  • 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(WorkSheetAnnotation.class)) {}
         //判断类上是否有次注解
         if(pjp.getTarget().getClass().isAnnotationPresent(WorkSheetAnnotation.class)){}
         //获取方法上的注解值
           method.getAnnotation(NoAuth.class)
         log.info("method{}",method); System.out.println("!!!!!!!!!!!!!!!!!已被拦截"); 
      return pjp.proceed(); 
       } 
    }
    @Target({METHOD, FIELD})
    @Retention(RUNTIME)
    @Documented
    public @interface NoAuth{
    
        String message() default "";
    
    }
    /**
     * @Description 工单类注解
     * @Author GX
     * @Date 2019/5/7 10:02
     * @Version V1.0
     **/
    @Target(TYPE)
    @Retention(RUNTIME)
    @Documented
    public @interface WorkSheetAnnotation {
    }
    //获取当前请求的URI
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    String uri = request.getRequestURI()

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

    第一步
    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());
    }

    }


  • 相关阅读:
    NTP时钟服务器(卫星授时)技术让网络时间同步不再难
    视频监控系统为何需要GPS北斗授时服务器?
    如何选购GPS北斗卫星时钟同步装置?市场均价多少?
    Orange'S学习笔记(一)
    Oracle 11g中文版高清视频教程
    新书推荐:Orange'S:一个操作系统的实现
    引导扇区汇编代码解释
    灰度图转伪彩色图代码
    Visual Odometry For GPSDenied Flight And Mapping Using A Kinect
    [原创]日行一善,命运在不知不觉中改变
  • 原文地址:https://www.cnblogs.com/gaomanito/p/10683906.html
Copyright © 2011-2022 走看看