我正在为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文件中配置的过滤器,并使用我们的自定义过滤器。