• springBoot 拦截配置


    最近重构公司项目发现之前项目中有很多的拦截配置,用的大部分都是shiro进行拦截,将项目升级成boot项目之后试着shiro的方式半天,后来发现boot项目自带拦截,有点捡来芝麻丢了西瓜的感觉,好了废话不多说之间上代码:
    1、继承 WebMvcConfigurerAdapter 实现方法
    WebMvcConfigurerAdapter配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,Spring 5.0 以后WebMvcConfigurerAdapter会取消掉
    以下WebMvcConfigurerAdapter 比较常用的重写接口 
    /** 解决跨域问题 **/ public void addCorsMappings(CorsRegistry registry) ;
    /** 添加拦截器 **/ void addInterceptors(InterceptorRegistry registry); 
    /** 这里配置视图解析器 **/ void configureViewResolvers(ViewResolverRegistry registry);
    /** 配置内容裁决的一些选项 **/ void configureContentNegotiation(ContentNegotiationConfigurer configurer); 
    /** 视图跳转控制器 **/ void addViewControllers(ViewControllerRegistry registry);
    /** 静态资源处理 **/ void addResourceHandlers(ResourceHandlerRegistry registry); 
    /** 默认静态资源处理器 **/ void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

    新的版本解决方案目前有两种:
    方案1 直接实现WebMvcConfigurer
    @Configuration
    public class WebMvcConfg implements WebMvcConfigurer {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
             registry.addViewController("/index").setViewName("index");
        }
    }
    方案2 直接继承WebMvcConfigurationSupport
    @Configuration
    public class WebMvcConfg extends WebMvcConfigurationSupport {
       @Override
       public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/index").setViewName("index");
       }
    }
    个人推荐使用第一种
    /**
    * 跨域配置 允许所以请求进来,可根据需求配置
    * @param registry
    */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**").allowedHeaders("*")
    .allowedMethods("*")
    .allowedOrigins("*")
    .maxAge(3628800)
    .allowCredentials(true);
    }
    /**
    * 拦截器配置 拦截所需要拦截的请求,走addInterceptor内new的方法校验
    * @param registry
    */
    @Override
    public void addInterceptors(InterceptorRegistry registry){
    if(!devWithoutInterception) {
    registry.addInterceptor(new UserInterceptor())
    .addPathPatterns("/user/*.do", "/order/*.do")
    .excludePathPatterns("/common/*.do", "/wechat/*.do");
    registry.addInterceptor(new WebRequestInterceptor())
    .addPathPatterns("/html/*.do")
    .excludePathPatterns("/common/*.do");
    }
    }
    /**
    * FilterRegistrationBean
    * 用来配置urlpattern
    * 来确定哪些路径触发filter
    * order 顺序
    */
    @Bean
    public FilterRegistrationBean someFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new DecryptFilter());
    registration.addUrlPatterns("/user/*","/order/*");
    registration.setOrder(1);
    return registration;
    }
    /**
    * 配置微信访问拦截
    * @return
    */
    @Bean
    public ServletRegistrationBean indexServletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new AccessTokenServlet());
    registration.addUrlMappings("/AccessTokenServlet");
    registration.addInitParameter("appId",wxappid);
    registration.addInitParameter("appSecret",wxappSecret);
    return registration;
    }
    /**
    * 在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器。
    * 在HiddenHttpMethodFilter过滤器中会调用request.getParameter(),
    * 从而造成我们在controller中通过request的InputStream无法读取到RequestBody的数据
    * @return
    */
    @Bean
    public HiddenHttpMethodFilter hiddenHttpMethodFilter() {
    return new OrderedHiddenHttpMethodFilter(){
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
    throws ServletException, IOException {
    filterChain.doFilter(request, response);
    }
    };
    }
    以上部分原创其余则是参考别人敬请谅解。


    ---------------------
    作者:yanlingkong741
    来源:CSDN
    原文:https://blog.csdn.net/yanlingkong741/article/details/83068593?utm_source=copy
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)
    WinDbg常用命令系列---!findstack
    WinDbg常用命令系列---!peb
    WinDbg常用命令系列---!teb
    WinDbg常用命令系列---!heap
    WinDbg常用命令系列---!htrace
    WinDbg常用命令系列---!handle
    WinDbg常用命令系列---!dlls
    WinDbg常用命令系列---!cppexr
    WinDbg常用命令系列---.load, .loadby (Load Extension DLL)
  • 原文地址:https://www.cnblogs.com/boyliuc/p/9796518.html
Copyright © 2020-2023  润新知