6

私は今、これで4時間本当に立ち往生していると思います。JAX-WS で開発されたサンプル Web サービスがあり、web.xml で BASIC 認証を正常に構成しましたが、"@RolesAllowed" アノテーションを機能させることができません。この注釈は単に無視されます。私はサーブレット 3.0 API と tomcat 7.0.32 を使用しているので、@RolesAllowed をサポートする必要があると思います。

以下は私のコードです: Web.xml には、次の構成があります。

<security-constraint>
    <display-name>SecurityConstraint</display-name>
    <web-resource-collection>
        <web-resource-name>ApexeWebServiceCollection</web-resource-name>
        <description>These resources are only accessible by authorised client.</description>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <description>These are the roles who have access.</description>
        <role-name>developer</role-name>
        <role-name>tester</role-name>
    </auth-constraint>
    <user-data-constraint>
        <description>This is how the user data must be transmitted.</description>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>default</realm-name>
</login-config>
<security-role>
    <description>Service developer</description>
    <role-name>developer</role-name>
</security-role>
<security-role>
    <description>Service tester</description>
    <role-name>tester</role-name>
</security-role>

次に、サービス側で次のメソッドを実装しました。メソッドが必要です:「sayNumber」は「テスター」ではなく「開発者」のみがアクセスできます:

@SchemaValidation(handler = SchemaValidationErrorHandler.class) @WebService(endpointInterface = "com.webservice.HelloWorld")

public class HelloWorldImpl は HelloWorld を実装します {

@Resource
WebServiceContext wsContext;

@Override
@WebMethod
@RolesAllowed("developer")
public int sayNumber(double number) throws SOAPException {
    MessageContext messageContext = wsContext.getMessageContext();
    boolean isAllowed=wsContext.isUserInRole("developer");
    System.out.println("Authorization:"+isAllowed);
    return (int) ++number;
}

}

次に、Spring 構成 (はい、Spring 3.1.2 も使用します) では、URI とサービスを接続するために次のものが必要です。

<wss:binding url="/hello">
    <wss:service>
        <ws:service bean="#helloWorldWebService"
            bindingID="http://www.w3.org/2003/05/soap/bindings/HTTP/" />
    </wss:service>
</wss:binding>

次に、クライアントを使用してこの Web サービスを呼び出します。クライアントは、「テスター」ロールでユーザー名とパスワードを使用しています。HelloWorldImpl のコード:

boolean isAllowed=wsContext.isUserInRole("developer");
    System.out.println("Authorization:"+isAllowed);

確かに、ここで例外をスローして、テスターを追い出すことができます。ただし、アノテーション「@RolesAllowed」で作業を行いたいです。私は多くの方法を試しましたが、この注釈は単に機能しません (注釈は無視されます)。助けてください。

4

0 に答える 0