Веб-сервис JAX-WS и @rolesAllowed

Можно ли использовать@RolesAllowed аннотация на веб-сервисе JAX-WS и если да, то как?

У меня есть веб-сервис Glassfish 3.1.1 с использованием базовой аутентификации, но ограничения выражены с помощью@RolesAllowed игнорируются Информация о роли должна быть доступна, так как я могу получить к ней доступ следующим образом:

@Resource
WebServiceContext wsContext;

if (wsContext.isUserInRole("READ"))
log.info("Role: READ");

Я получаю ожидаемую роль, но все же все методы доступны, даже если@RolesAllowed устанавливается на другую роль.@DenyAll тоже не работает.

Если эти аннотации не поддерживаются, возможно ли использовать дескрипторы развертывания для управления доступом к методам веб-сервиса на основе ролей пользователей?

редактировать: Этот часть учебника по JAVA EE 6 описывает использование@RolesAllowed аннотаций. Это читает

Для компонентов Java EE вы определяете роли безопасности с помощью аннотаций метаданных @DeclareRoles и @RolesAllowed.

Веб-службы не перечислены в качестве компонентов Java EE в первой части руководства, поэтому, похоже, что аннотации безопасности не поддерживаются.

Edit2 После поста Изана я дал еще одну попытку. Вот что я сделал:

@Webservice
@DeclareRoles(value = {"READ", "UPDATE", "DELETE"})
public class ServiceImpl implements Service {
  @Override
  @WebMethod(operationName = "helloWorld")
  @RolesAllowed({"NONE"})
  public String helloWorld() throws Exception {
     return "Hello World!";
  }
}

Используя этот вид настройки, каждый может получить доступ к методу, независимо от того, какие роли установлены. Пользователи проходят аутентификацию (это можно увидеть в audit.log), но авторизация не происходит. Как указано выше, я могу получить доступ к роли изWebServiceContext (Я на самом делеруководство по эксплуатации авторизация с использованием этой информации).

Добавление@Stateless аннотации, давайте использовать аннотации безопасности. Так@permitAll работает как положено. Но использование ролей по-прежнему не работает, поскольку пользователь не проходит проверку подлинности. Они появляются какANONYMOUS в журнале аудита и доступ к ним запрещен.

мойweb.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 <display-name>OneMore</display-name>

 <security-constraint>  
    <display-name>WebServiceSecurity</display-name>  

    <web-resource-collection>  
      <web-resource-name>Authorized users only</web-resource-name>  
      <url-pattern>/service</url-pattern>  
      <http-method>POST</http-method>
    </web-resource-collection>  

    <auth-constraint>       
       <role-name>READ</role-name>
       <role-name>UPDATE</role-name>
       <role-name>DELETE</role-name>
    </auth-constraint>  

 </security-constraint>  

 <login-config>
    <auth-method>BASIC</auth-method>
 </login-config>

 <security-role>
    <role-name>READ</role-name>
 </security-role>

 <security-role>
    <role-name>UPDATE</role-name>
 </security-role>

 <security-role>
    <role-name>DELETE</role-name>
 </security-role>
</web-app>

Glassfish-web.xml просто сопоставляет имена ролей с именами групп, например так:

<security-role-mapping>
   <role-name>READ</role-name>
   <group-name>READ</group-name>
</security-role-mapping>

Редактировать 3 Благодаря Изану и бесчисленным попыткам позже я, наконец-то, заработал.

Как уже было сказано, основной целью было переключение с простого веб-сервиса на веб-сервис EJB путем добавления@Stateless аннотаций. Это позволяет использовать аннотации безопасности.

Это изменение требуется также для изменения дескрипторов развертывания. В то время как оригинальный веб-сервис требовалglassfish-web.xml для настройки ролей,glassfish-ejb-jar.xml требуется впоследствии.

Ответы на вопрос(2)

Ваш ответ на вопрос