开发者社区> 问答> 正文

关于新增过滤器最优的方式

目前我的做法是自己下载源码自己打包,因为需要在druid-filter.properties中添加过滤器,有没有在jar外编码的方式,这样我就可以一直用最新版本的jar了

原提问者GitHub用户boboChina

展开
收起
山海行 2023-07-05 22:01:07 81 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在Druid中添加自定义的过滤器,可以通过在druid-filter.properties文件中添加配置来实现,而不需要对Druid的源码进行修改和打包。具体步骤如下:

    创建一个自定义的过滤器类,该类需要实现Druid提供的Filter接口,并实现对应的方法。例如,以下是一个简单的自定义过滤器类:
    java
    Copy
    public class MyFilter implements Filter {

    @Override
    public boolean isResetFilterChain(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO: 实现自定义的过滤器逻辑
        return false;
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO: 实现自定义的过滤器逻辑
        chain.doFilter(request, response);
    }
    
    @Override
    public void init(FilterConfig config) throws ServletException {
        // TODO: 实现自定义的过滤器初始化逻辑
    }
    
    @Override
    public void destroy() {
        // TODO: 实现自定义的过滤器销毁逻辑
    }
    

    }
    在druid-filter.properties文件中添加配置,指定自定义过滤器的类名。例如,假设自定义过滤器类的完整类名为com.example.MyFilter,可以在druid-filter.properties文件中添加如下配置:
    Copy
    druid.filters=myFilter
    druid.filter.myFilter=com.example.MyFilter
    在上述配置中,druid.filters指定了需要启用的过滤器列表,多个过滤器之间可以使用逗号分隔。druid.filter.myFilter指定了自定义过滤器的类名。需要注意的是,类名需要使用完整的包名+类名格式,并且不能包含空格或其他特殊字符。

    将自定义过滤器类打包成jar包,并将jar包添加到Druid的classpath中。可以将jar包放置在Druid的lib目录中,或者在启动Druid的时候使用-cp或-classpath参数指定jar包的路径。

    2023-07-29 23:23:10
    赞同 展开评论 打赏
  • 支持的,你看这个代码

    // com.alibaba.druid.pool.DruidDataSource.initFromSPIServiceLoader private void initFromSPIServiceLoader() {

    String property = System.getProperty("druid.load.spifilter.skip");
    if (property != null) {
        return;
    }
    
    ServiceLoader<Filter> druidAutoFilterLoader = ServiceLoader.load(Filter.class);
    
    for (Filter autoFilter : druidAutoFilterLoader) {
        AutoLoad autoLoad = autoFilter.getClass().getAnnotation(AutoLoad.class);
        if (autoLoad != null && autoLoad.value()) {
            if (LOG.isInfoEnabled()) {
                LOG.info("load filter from spi :" + autoFilter.getClass().getName());
            }
            addFilter(autoFilter);
        }
    }
    

    }

    原回答者GitHub用户wenshao

    2023-07-06 12:31:32
    赞同 展开评论 打赏
  • 如果您希望在Druid连接池中使用自定义的过滤器,并且希望以一种不修改Druid源码的方式来实现,您可以考虑以下几种方法:

    1. 使用Druid提供的扩展机制:Druid连接池提供了扩展机制,允许您在不修改源码的情况下添加自定义的过滤器。您可以实现com.alibaba.druid.filter.Filter接口,编写自己的过滤器,并在Druid连接池的配置文件中配置该过滤器。具体步骤如下:

      • 创建一个实现了Filter接口的自定义过滤器类,实现过滤器的逻辑。
      • 在Druid连接池的配置文件(通常是druid.propertiesapplication.properties)中添加以下配置项:
        filters=your.custom.filter
        

        其中your.custom.filter是您自定义过滤器的类名。

      • 将您的自定义过滤器类和Druid连接池的配置文件一起打包,并使用最新版本的Druid连接池的jar包。
    2. 使用Maven或Gradle构建工具:如果您使用Maven或Gradle等构建工具来管理您的项目依赖,您可以将Druid连接池的源码作为一个依赖引入,并在自己的项目中添加自定义过滤器的代码和配置。这样,当您更新Druid连接池的版本时,您无需手动下载源码和打包,只需更新构建工具中的Druid依赖版本即可。

    2023-07-06 09:16:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载