特定のカスタム Cookie を読み取り、その Cookie に格納されているユーザー ベースの od トークンを認証する独自のオーセンティケーターを作成しようとしています。例として、次のクラスを取り上げました: org.jboss.security.negotiation.NegotiationAuthenticator
そこで、独自のオーセンティケーターを書き始めます。
public class SampleAuthenticator extends AuthenticatorBase{
@Override
protected boolean authenticate(Request arg0, Response arg1, LoginConfig arg2) throws IOException {
System.out.println("===CHECK===");
return false;
}
ご覧のとおり、私のクラスには、デフォルト値で実装する必要がある必要なメソッドのみが含まれています。
このオーセンティケータをモジュールとして Jboss の「モジュール」ディレクトリにインストールしました。
次に、standalone.xml に新しいセキュリティ ドメインを追加しました。
<security-domain name="sso" cache-type="default">
<authentication>
<login-module code="UsersRoles" flag="required" />
</authentication>
</security-domain>
モジュールをstandalone.xmlでもグローバルとして作成しました(jbossドメインサブシステム内):
<global-modules>
<module name="com.myexample.authenticator"/>
</global-modules>
これで、オーセンティケーターを使用する準備ができたようです (出力単語 "===CHECK===" のみ)
サンプル Web アプリケーションに jboss-web.xml 記述子を追加しました。
<jboss-web>
<security-domain>sso</security-domain>
<valve>
<class-name>com.myexample.authenticator.SampleAuthenticator</class-name>
</valve>
</jboss-web>
私の web.xml 記述子は次のとおりです。
<security-constraint>
<web-resource-collection>
<web-resource-name>MyResourceName</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>My kinda secure web application</realm-name>
</login-config>
<security-role>
<role-name>user</role-name>
</security-role>
最後に、Web アプリケーションをデプロイしようとすると、次の例外がスローされます。
12:41:28,554 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.web.valve.myvalve: org.jboss.msc.service.StartException in service jboss.web.valve.myvalve: java.lang.ClassCastException: com.myexample.authenticator.SampleAuthenticator cannot be cast to org.apache.catalina.Valve
at org.jboss.as.web.WebValveService.start(WebValveService.java:92)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_55]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_55]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_55]
Caused by: java.lang.ClassCastException: com.myexample.authenticator.SampleAuthenticator cannot be cast to org.apache.catalina.Valve
at org.jboss.as.web.WebValveService.start(WebValveService.java:72)
... 5 more
私はこの時点で立ち往生しています。いくつかのオーセンティケーターを再実装しようとしましたが、この ClassCastException は常に存在します。
独自のオーセンティケーターの作成を手伝ってくれる人はいますか? Jboss 7.1.1 で Jboss EAP 6.2 を使用しています