springboot怎么让自定义的拦截器优先于pagehelper执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot怎么让自定义的拦截器优先于pagehelper执行相关的知识,希望对你有一定的参考价值。

把pagehelper-spring-boot-starter包改成pagehelper,不自动配置改为手动配置顺序,例如分页前拦截数据权限:

@Configuration
public class MybatisInterceptorAutoConfiguration 

    @Autowired
    private List<SqlSessionFactory> sqlSessionFactoryList;

    @Bean
    @ConfigurationProperties(prefix = "pagehelper")
    public Properties pageHelperProperties() 
        return new Properties();
    

    @PostConstruct
    public void addmysqlInterceptor() 
        //数据权限拦截器
        DataPermissionInterceptor dataPermissionInterceptor = new DataPermissionInterceptor();
        //分页拦截器
        PageInterceptor pageInterceptor = new PageInterceptor();
        pageInterceptor.setProperties(this.pageHelperProperties());

        for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) 
            sqlSessionFactory.getConfiguration().addInterceptor(pageInterceptor);
            sqlSessionFactory.getConfiguration().addInterceptor(dataPermissionInterceptor);
        
    

参考技术A 自定义的拦截器和pagehelper是2个完全不同的东西啊
拦截器中可以执行pagehelper代码
多个拦截器有顺序,按照配置的顺序来。
我不太理解你的问题追问

pagehelper的底层也是一个拦截器呀 是基于拦截器实现的
然后 我想问的主要就是 有多个拦截器 怎么在springboot中用注解来配置它的执行顺序?
谢答

追答

implements WebMvcConfigurer

/**
 * 多个拦截器组成一个拦截器链
 * addPathPatterns 添加拦截规则
 * excludePathPatterns 排除拦截
 */
@Override
public void addInterceptors(InterceptorRegistry registry) 

    // 白名单配置
    registry.addInterceptor(ipWhiteListInterceptor).addPathPatterns("/**");

    // 菜单权限
    registry.addInterceptor(menuAuthInterceptor).addPathPatterns("/**")
            .excludePathPatterns(adminConfig.getIgnoredPath())
            .excludePathPatterns(fileUploadConfig.getResourceHandler())
            .excludePathPatterns(ueditorUploadConfig.getResourceHandler());

addInterceptors方法里多个拦截器配置,按顺序

追问

尴尬 不好意思 没有说清楚 是mybatis的拦截器设置 不是servlet的拦截器

追答

这个我没有配置过,不清楚

追问

好吧 谢谢你

Springboot项目请求tomcat特殊字符拦截最优解决方案

SpringBoot内嵌tomcat版本大于8.0对请求URL做了严格的过滤, RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])**
java.lang.IllegalArgumentException: Invalid character found in the request target.
The valid characters are defined in RFC

网上大多数教程是使用修改tomcat requestTargetAllow参数来绕过过滤。
但是需要添加需要透传的字符集。而且即使修改了tomcat配置之后,搭配Swagger使用还会出现类型转化异常等异常。

java.lang.NumberFormatException: For input string: “”

推荐的做法是对参数进行JSON string化之后,二次encodeURIComponent编码(至于为什么需要二次编码,可以百度一下),后台解析出对应对象。

  • 前端代码
value: encodeURIComponent(encodeURIComponent(JSON.stringify(src, target)))
  • 后端代码(这里ObjectName为需要转化的对象类名)
public void functionName(String value) throws UnsupportedEncodingException 
        value = URLDecoder.decode(URLDecoder.decode(value, "UTF-8"));
        ObjcetName one= JSONObject.parseObject(value, ObjcetName.class);
    

以上是关于springboot怎么让自定义的拦截器优先于pagehelper执行的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 样式优先于自定义 CSS

为啥导入的类优先于捆绑类?

_default_:443 的 Apache2.4 优先于第一个 *:443 虚拟主机定义

spring boot怎么配置拦截器

CNAME 记录中的 * 是不是优先于显式子域?

Java 微服务 乐优网络商城 day02 源代码 SpringBoot 实战开发 SpringMVC高级配置:拦截器:HandlerExecutionChain