我正在为 nexus oss 编写一个插件,我需要使用新的过滤器而不是 nexus oss 中规定的过滤器。
在早期版本的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 以获取我们的过滤器而不是 nexus oss 的 NexusSecureHttpAuthenticationFilter 并且工作完成了。
但是现在在最新版本的 nexus oss 中,他们正在一个 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。这里的障碍是因为它是一个 java 文件,我无法像在 web.xml 中那样轻松地修改它。有没有一种方法可以覆盖他们在 java 文件中配置的过滤器,并使 nexus oss 使用我们的自定义过滤器。