REST Api で HTTP 認証ヘッダーを使用すると、コンテナの構成によって検証されると思います。これに関するJava EEベンダー中立の仕様がまだないという理由だけで、特定のベンダー固有の実装が存在するでしょう。ユーザーが検証されると、Principal
が作成され、すべての EJB @RolesAllowed アノテーションが機能します。
DukesForest を Wildflyに移植したので、動作中の例を見ることができます。残りのサービスの dukes-payment を見て、web.xml と jboss-web.xml に注意してください。また、データベース構成の Entities プロジェクトを見てください。
基本的に、web.xml はセキュリティ制約を定義します。
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure payment service</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
<http-method-omission>GET</http-method-omission>
</web-resource-collection>
<auth-constraint>
<role-name>USERS</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>USERS</role-name>
</security-role>
また、Wildfly はsecurity-domain
、データベースのクエリ方法を指定するために追加する必要があります。
<security-domain name="dukes-forest" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/ForestXADS"/>
<module-option name="rolesQuery" value="select NAME as 'ROLES', 'Roles' as 'ROLEGROUP' from forest.GROUPS g inner join forest.PERSON_GROUPS pg on g.ID = pg.GROUPS_ID join forest.PERSON p on p.EMAIL = pg.EMAIL where p.EMAIL = ?"/>
<module-option name="hashAlgorithm" value="MD5"/>
<module-option name="hashEncoding" value="HEX"/>
<module-option name="principalsQuery" value="select PASSWORD from forest.PERSON where EMAIL=?"/>
</login-module>
</authentication>
<authorization>
<policy-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/ForestXADS"/>
<module-option name="rolesQuery" value="select NAME as 'ROLE', 'ROLES' as 'ROLEGROUP' from forest.GROUPS g inner join forest.PERSON_GROUPS pg on g.ID = pg.GROUPS_ID join forest.PERSON p on p.EMAIL = pg.EMAIL where p.EMAIL = ?"/>
<module-option name="hashAlgorithm" value="MD5"/>
<module-option name="hashEncoding" value="HEX"/>
<module-option name="principalsQuery" value="select PASSWORD from forest.PERSON where EMAIL=?"/>
</policy-module>
</authorization>
</security-domain>
これが基本的な考え方です。
PS> Web フレームワークにセキュリティを実装するJava Security Quickstart Archetypeもあり、上記の例に基づいて Http 基本認証を簡単に追加できるはずです。