2011-01-27 15 views
1

GlassFish 2サーバにデプロイされたいくつかのスタティックレスEJB(EJB3)があり、@Webmethodアノテーションを使用してメソッドの一部をWebサービスとして公開しています。GlassFish 2でWebサービスを保護する方法は?

ここで、認証されたクライアントだけが呼び出すことができるように、これらのWebサービスメソッドを保護する必要があります。これを達成するための良い方法は何でしょうか?

+0

認証されたクライアントとは、クライアントのデジタル認証を意味しますか? – Cratylus

+0

はい、デジタル証明書が最適です。 – Sylar

+0

問題は、SSLを使用してWebサービスポートを保護することはできません。同じポート上で異なるURL上の他のサービスが保護されるべきでないためです。 – Sylar

答えて

5

いい声優が言ったように。以下の例では、ファイルレルムを認証に使用しています。あなたはまた、例えば日-のejb-jar.xmlのが必要になります

@Stateless 
@WebService(name = "MyAppServices") 
@RolesAllowed({"user"}) 
public class ItemEJB { 
    ... 
} 

GlassFishの中のファイルレルムのグループの

<sun-ejb-jar> 
<security-role-mapping> 
      <!-- as defined in @RolesAllowed --> 
    <role-name>user</role-name> 
      <!-- glassfish group created in file realm --> 
    <group-name>user</group-name> 
</security-role-mapping> 
<enterprise-beans> 
    <ejb> 
     <ejb-name>ItemEJB</ejb-name> 
     <webservice-endpoint> 
      <!-- equivalent to name attribute of @WebService --> 
      <port-component-name>MyAppServices</port-component-name> 
      <login-config> 
       <auth-method>BASIC</auth-method> 
       <realm>file</realm> 
      </login-config> 
     </webservice-endpoint> 
    </ejb> 
</enterprise-beans> 

作成は(管理コンソール)自明です。しかし、独自のカスタムレルムとログインモジュールを作成することができます

3

あなたは、セキュリティアノテーションを使用してメソッドまたはBean全体にアクセスするためのロールのリストを承認することができます。例えば

@Stateless 
@RolesAllowed({"user", "employee", "admin"}) 
public class ItemEJB { 
    ... 
} 

は、より多くの情報については、以下のリンクを参照してください。

1

http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/は、今、私たちだけがそれを呼び出すことができます クライアントを認証されたので、これらのWebサービス 方法を確保したいです。

これはsslに関連しないと仮定します。それで:
1)クライアントはユーザ名とパスワードを入力してログインします
2)ユーザ名とパスワードが正しい(DBに保存されている)場合、ユーザはログインしているとみなされ、一意のセッショントークンユーザー名とパスワード)は、Webサービスによって生成され、返信で返信されます。
このトークンは、タイムスタンプ情報とユーザー名とパスワードと共に保存されます。
3)要求がクライアントによって送信されるたびに、トークンは他のパラメータと共に返されます。トークンが有効であれば、これは認証されたクライアントからの要求であることを意味します。
4)すべての要求には残りのパラメータとのセッショントークンが必要です。
認証されていないクライアントは、送信するトークンを持ちません。

関連する問題