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

    }


  • 相关阅读:
    关于Js异常
    gitea windows 安装
    spring boot 错误页面配置
    mysql 常用用函数
    nginx 安装 tomcat pfx 格式证书
    git pull 报错
    maven 打 jar 包,包含 xml, 包含 额外 jar
    git clone 分支代码
    git 切换远程分支
    mycat 在 mysql 8.0 下 无法连接 bug
  • 原文地址:https://www.cnblogs.com/gaomanito/p/10683906.html
Copyright © 2011-2022 走看看