• SpringBoot添加自定义拦截器


    在Controller层时,往往会需要校验或验证某些操作,而在每个Controller写重复代码,工作量比较大,这里在Springboot项目中 ,通过继承WebMvcConfigurerAdapter,添加拦截器。

    1、WebMvcConfigurerAdapter源码

    /*
     * Copyright 2002-2016 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.web.servlet.config.annotation;
    
    import java.util.List;
    
    import org.springframework.format.FormatterRegistry;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.validation.MessageCodesResolver;
    import org.springframework.validation.Validator;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    
    /**
     * An implementation of {@link WebMvcConfigurer} with empty methods allowing
     * subclasses to override only the methods they're interested in.
     *
     * @author Rossen Stoyanchev
     * @since 3.1
     */
    public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addFormatters(FormatterRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addCorsMappings(CorsRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation is empty.
         */
        @Override
        public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation returns {@code null}.
         */
        @Override
        public Validator getValidator() {
            return null;
        }
    
        /**
         * {@inheritDoc}
         * <p>This implementation returns {@code null}.
         */
        @Override
        public MessageCodesResolver getMessageCodesResolver() {
            return null;
        }
    
    }

    可以看出,该类 还能配置其他很多操作,例如异常处理,跨域请求等配置。

    2、自动义Web配置类

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    
    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**");
        }
        
        @Bean
        public MyInterceptor getMyInterceptor(){
            return new MyInterceptor();
        }
        
    
    
    }

      如果需要添加多个拦截器,InterceptorRegistry registry.addInterceptor方法

    public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor) {
            InterceptorRegistration registration = new InterceptorRegistration(interceptor);
            this.registrations.add(registration);
            return registration;
        }
    registrations是个数组结构,可以添加多个

    3、自动义拦截器

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    
    
    public class MyInterceptor extends HandlerInterceptorAdapter {
    
        final Logger logger = LoggerFactory.getLogger(getClass());
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //拦截操作
            return true;
        }
        
    }
  • 相关阅读:
    [git 学习篇]自己在github创建一个远程服务器创库
    [git 学习篇]远程创库
    [git 学习篇]删除文件
    [git 学习篇] git checkout 撤销修改
    [git 学习篇]git管理的是修改,并非文件
    log4net面面观之Repository
    log4net面面观之工作原理
    asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法
    C#使用Log4Net记录日志
    SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板
  • 原文地址:https://www.cnblogs.com/zwdx/p/9674497.html
Copyright © 2020-2023  润新知