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 の代わりにフィルターを使用する方法がわかりません。ここでの障害は、 web.xml で行ったように簡単に変更できない Java ファイルであるためです。彼らが 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 に答える