0

我正在为 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 使用我们的自定义过滤器。

4

1 回答 1

0

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

于 2013-08-26T05:36:26.873 回答