2013-08-26 50 views
0

我正在为nexus oss写一个插件,我需要使用新的过滤器而不是nexus oss中规定的过滤器。如何覆盖在java文件中配置的过滤器?

在早期版本的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 

所以我们用来做的只是修改此web.xml中把我们的过滤器,而不是关系的NexusSecureHttpAuthenticationFilter oss和工作完成了。

但现在关系OSS的最新版本,他们正在做的所有的过滤器configiurations在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); 
    } 

完整的Java代码是在这里NexusSecurityFilterModule.java

所以现在我不知道如何让nexus oss使用我们的过滤器,而不是他们的NexusSecurityFilterModule.java。这里的障碍是因为它是一个我无法像修改web.xml那样容易修改的java文件。有没有一种方法可以覆盖他们在java文件中配置的过滤器,并使用我们的自定义过滤器。

回答

0

我有一个解决方案,但它不正确的解决方案。无论如何,它解决了你的问题。 取代jar文件中的JavaFile反编译更改代码什么是你想要和注入到jar中 这里是一步, 1.使用java反编译器从jar中反编译那个类,这里​​(NexusSecurityFilterModule.class) 并获取Java文件NexusSecurityFilterModule.java) 2.更改你想要的文件管理器。 3.编译类获取NexusSecurityFilterModule.class 4.注入jar。 jar -uvf <jar-name> <javaclass> 完成。 快乐更新!