nexus が認証を行うためのカスタム フィルタを作成しています。ソースコードに似たフィルター モジュールを作成してフィルターを追加すると、 guiceプロビジョニングの例外が発生します。何が本当の原因なのかわからない。ヌルポインタ例外と言うだけです。
Sisu - Problem adding: org.sonatype.guice.bean.locators.LazyBeanEntry@7bb3bc to: org.apache.shiro.web.filter.mgt.DefaultFilterChainManager@5b460d via: org.sonatype.security.web.guice.SecurityWebModule$FilterChainManagerProvider@1d31aaa
com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.NullPointerException
at org.sonatype.guice.bean.binders.LocatorWiring
while locating org.sonatype.nexus.security.filter.authc.PasswordDecryptor
for field at org.sonatype.nexus.security.filter.authc.NexusSecureHttpAuthenticationFilter.passwordDecryptor(NexusSecureHttpAuthenticationFilter.java:20)
while locating net.collab.iaf.sso.authentication.rest.CTFAuthenticationFilter
at file:/media/blackhole/temp/nexus/nexus-bundle-template-2.6.1-SNAPSHOT-bundle/nexus-bundle-template-2.6.1-SNAPSHOT/../sonatype-work/nexus/plugin-repository/authentication-0.0.1-SNAPSHOT/authentication-0.0.1-SNAPSHOT.jar!/
at file:/media/blackhole/temp/nexus/nexus-bundle-template-2.6.1-SNAPSHOT-bundle/nexus-bundle-template-2.6.1-SNAPSHOT/../sonatype-work/nexus/plugin-repository/authentication-0.0.1-SNAPSHOT/authentication-0.0.1-SNAPSHOT.jar!/
while locating javax.servlet.Filter annotated with @com.google.inject.name.Named(value=authcBasic)
1 error
at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1006) [sisu-guice-3.1.4.jar:3.1.4]
私のカスタムフィルターモジュールは、上記のリンクで提供したソースコードファイルと同じで、 authcBasic と authcNxBasic のフィルターのみです。ここでは、 NexusSecureHttpAuthenticationFilter の代わりに CTFAuthenticationFilter という名前のカスタム フィルターを使用しています。この問題を解決するための指示を教えてください。私のフィルターモジュールのスニップは次のとおりです
@Override
protected void configure() {
requireBinding(FilterChainResolver.class);
logger.info("I am inside collabnetsso");
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) {
logger.info("I am inside collabnetsso authc module");
CTFAuthenticationFilter filter = new CTFAuthenticationFilter();
filter.setApplicationName(applicationName);
filter.setFakeAuthScheme(Boolean.toString(fakeAuthSchem));
bindNamedFilter(name, filter);
}
これは、たまにしか発生しないため、奇妙に見えます。それが 2 回連続して発生した場合、この 2 回では私の認証は発生しません。しかし、再び再起動すると、例外が消え、おまじないのように機能し始め、必要に応じて認証が行われます。これは、ネクサスで競合状態が発生しているのではないかという疑問をもたらします。それとも、Googleのガイダンスが何かを期待していて、それが時々利用できないということですか.