如何覆盖java文件中配置的过滤器?

如何覆盖java文件中配置的过滤器?,java,servlet-filters,web.xml,nexus,Java,Servlet Filters,Web.xml,Nexus,我正在为NexusOSS编写一个插件,我需要使用一个新的过滤器,而不是NexusOSS中规定的过滤器 在nexus oss的早期版本中,所有过滤器都在web.xml中定义,如下所示 <filter> <filter-name>nexusFilter</filter-name> <filter-class>org.sonatype.nexus.security.filter.NexusJSecurityFilter</filte

我正在为NexusOSS编写一个插件,我需要使用一个新的过滤器,而不是NexusOSS中规定的过滤器

在nexus oss的早期版本中,所有过滤器都在web.xml中定义,如下所示

<filter>
    <filter-name>nexusFilter</filter-name>
    <filter-class>org.sonatype.nexus.security.filter.NexusJSecurityFilter</filter-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>
      [filters]
        authcBasic = org.sonatype.nexus.security.filter.authc.NexusSecureHttpAuthenticationFilter
        authcBasic.applicationName = Sonatype Nexus Repository Manager API
        authcBasic.fakeAuthScheme = false

        authcNxBasic = org.sonatype.nexus.security.filter.authc.NexusSecureHttpAuthenticationFilter
        authcNxBasic.applicationName = Sonatype Nexus Repository Manager API (specialized auth)
        authcNxBasic.fakeAuthScheme = true

nexusFilter
org.sonatype.nexus.security.filter.NexusJSecurityFilter
配置
[过滤器]
authcBasic=org.sonatype.nexus.security.filter.authc.nexussecuriurehttpauthenticationfilter
authcBasic.applicationName=Sonatype Nexus存储库管理器API
authcBasic.fakeAuthScheme=false
authcNxBasic=org.sonatype.nexus.security.filter.authc.nexussecuriurehttpauthenticationfilter
authcNxBasic.applicationName=Sonatype Nexus存储库管理器API(专用身份验证)
authcNxBasic.fakeAuthScheme=true
因此,我们过去所做的只是修改这个web.xml以使用我们的过滤器,而不是nexus oss的NexusSecureHttpAuthenticationFilter,工作就完成了

但现在在最新版本的NexusOSS中,他们在一个java文件中进行所有过滤器配置

@Named
public class NexusSecurityFilterModule
    extends AbstractModule
{
    @Override
    protected void configure()
    {
        requireBinding( FilterChainResolver.class );

        bindAuthcFilter( "authcBasic", false, "Sonatype Nexus Repository Manager API" );
        bindAuthcFilter( "authcNxBasic", true, "Sonatype Nexus Repository Manager API (specialized auth)" );
.
.
.
private void bindAuthcFilter( String name, boolean fakeAuthSchem, String applicationName )
    {
        NexusSecureHttpAuthenticationFilter filter = new NexusSecureHttpAuthenticationFilter();
        filter.setApplicationName( applicationName );
        filter.setFakeAuthScheme( Boolean.toString( fakeAuthSchem ) );
        bindNamedFilter( name, filter );
    }
.
.
private void bindNamedFilter( String name, Filter filter )
    {
        Key<Filter> key = Key.get( Filter.class, Names.named( name ) );
        bind( key ).toProvider( defer( filter ) ).in( Scopes.SINGLETON );
    }
@Named
公共类NexusSecurityFilterModule
扩展抽象模块
{
@凌驾
受保护的void configure()
{
要求绑定(FilterChainResolver.class);
bindAuthcFilter(“authcBasic”,false,“Sonatype Nexus存储库管理器API”);
bindAuthcFilter(“authcNxBasic”,true,“Sonatype-Nexus存储库管理器API(专用auth)”;
.
.
.
私有void bindAuthcFilter(字符串名、布尔fakeAuthSchem、字符串应用程序名)
{
NexUsSecureTPauthenticationFilter=新的NexUsSecureTPauthenticationFilter();
filter.setApplicationName(applicationName);
filter.setFakeAuthScheme(Boolean.toString(fakeAuthSchem));
bindNamedFilter(名称,过滤器);
}
.
.
私有void bindNamedFilter(字符串名称,筛选器筛选器)
{
Key=Key.get(Filter.class,Names.named(name));
(Scopes.SINGLETON)中的bind(key).toProvider(defer(filter)).in;
}
过滤器配置的完整java代码在这里


因此,现在我不知道如何让nexus oss使用我们的过滤器,而不是他们的NexusSecurityFilterModule.java。这里的障碍是,这是一个java文件,我无法像在web.xml中那样轻松修改。有没有办法覆盖他们在java文件中配置的过滤器,让nexus oss使用我们的自定义过滤器。

我有一个解决方案但这不是正确的解决方法。不管怎样,它解决了你的问题。 替换jar中的JavaFile,使用您想要的反编译更改代码,并重新注入jar 这是步骤, 1.使用java反编译器从jar反编译该类,如下(NexusSecurityFilterModule.class) 并获取Java文件(NexusSecurityFilterModule.Java) 2.更改您想要的文件管理器。 3.编译类get-NexusSecurityFilterModule.class 4.注入jar。
jar-uvf
完成。 更新快乐