在Spring中是否提供了拦截器链接的规定?

迪拉·古隆(Dila Gurung):

假设我们有两个拦截器“ LogInterceptor”和“ AuthInterceptor”。第一个拦截器记录传入的请求,第二个拦截器对它进行身份验证。目的:链接LogIntercptor和AuthInterceptor。首先,我希望调用logInterceptor,然后执行AuthInterceptor。注意:我知道“重定向”并返回false(请不要提出建议)

---------------------Log Interceptor---------------------------------------







    //First Inteceptor

    @Component
    public class LogInterceptor extends HandlerInterceptorAdapter
    {
        private final Logger Logger = 
        LoggerFactory.getLogger(this.getClass());
        @Override
        public boolean preHandle(HttpServletRequest request, 
         HttpServletResponse response, Object handler) throws Exception {

            //take action base on incoming IP
            long startTime = System.currentTimeMillis();
            request.setAttribute("startTime",startTime); 
            if(request.getRemoteAddr().startsWith("192")) 
                 {
                response.sendRedirect("/auth-failed"); //redirect to default
                return false;
            }
            return  true;

        }

        @Override
        public void postHandle(HttpServletRequest request, 
        HttpServletResponse response, Object handler, @Nullable ModelAndView 
         modelAndView) throws Exception
        {
        }

        @Override
        public void afterCompletion(HttpServletRequest request, 
        HttpServletResponse response, Object handler, @Nullable Exception 
        ex) throws Exception
        {



        }
      }

//第二个拦截器“但是代码还不完整,我只是想知道如何实现。” 类AuthInterceptor {

    }
陈健:

您只需要确保Interceptor在配置时按所需顺序添加即可InterceptorRegistry

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer{

    @Autowired
    private LogInterceptor logInterceptor;

    @Autowired
    private AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(logInterceptor);
        registry.addInterceptor(authInterceptor);
    }

}

如果您有多个WebMvcConfigurer,则可以简单地@Order用来控制的执行顺序WebMvcConfigurer(值越小优先级越高):

@EnableWebMvc
@Configuration
@Order(1)
public class FooWebConfig implements WebMvcConfigurer{

}

@EnableWebMvc
@Configuration
@Order(2)
public class BarWebConfig implements WebMvcConfigurer{

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章