Java EE 5 аннотации безопасности игнорируются при использовании методов в glassfish v2

У меня есть простое приложение EE5 с веб-клиентом, а модуль ejb работает со стеклом 2. Аннотации безопасности в ejbs на методах игнорируются, но не на уровне класса.

Например, я следую за bean:

@Stateful(mappedName = "ejb/PurchaseOrderDao")
 @DeclareRoles("employees")
 @RolesAllowed(value = { "employees" })
 public class PurchaseOrderDao implements PurchaseOrderDaoLocal {
 @Resource
 private EJBContext ejbContext;
 @DenyAll
 public final void add(final PurchaseOrder instance) {
 log.debug("Is User in Role employees: {}", ejbContext.isCallerInRole("employees"));
 delegate.add(instance);
 }
 [...]
}

Каждый пользователь может вызвать этот метод. Оператор отладки вернет правильное значение.

Ограничения безопасности веб-ресурсов в веб-клиенте, определенные в web.xml, работают как ожидалось, но не те, которые определены в аннотации на mwthods.

В моем application.xml я определяю сферу и роли. Я сопоставляю их в sun-application.xml.

В чем может быть причина? Это известная проблема о Glassfish v2? Он работает правильно в стеклянной факеле v3.

Другие ресурсы:

ВС-EJB-jar.xml

<!--?xml version="1.0" encoding="UTF-8"?-->

<sun-ejb-jar>
 <enterprise-beans>
 </enterprise-beans>
</sun-ejb-jar>

EJB-jar.xml

<!--?xml version="1.0" encoding="UTF-8"?-->
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
 <display-name>ejb</display-name>
</ejb-jar>

application.xml

<!--?xml version="1.0" encoding="UTF-8"?-->
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" id="ocea" version="5">
 <display-name>ocea</display-name>
 <module>
 <ejb>ejb.jar</ejb>
 </module>
 <module>
 <web>
 <web-uri>web.war</web-uri>
 <context-root>ocea</context-root>
 </web>
 </module>
 <security-role>
 <description>Employees</description>
 <role-name>employees</role-name>
 </security-role>
 <security-role>
 <description>Suppliers</description>
 <role-name>suppliers</role-name>
 </security-role>
 <library-directory>/lib</library-directory>
</application>

ВС-application.xml

<!--?xml version="1.0" encoding="UTF-8"?-->

<sun-application>
 <security-role-mapping>
 <role-name>employees</role-name>
 <group-name>employees</group-name>
 </security-role-mapping>
 <security-role-mapping>
 <role-name>suppliers</role-name>
 <group-name>suppliers</group-name>
 </security-role-mapping>
</sun-application>

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_2_5.xsd" id="WebApp_ID" version="2.5">
 <display-name>web</display-name>
 <!-- [...] -->
 <login-config>
 <auth-method>FORM</auth-method>
 <form-login-config>
 <form-login-page>/login</form-login-page>
 <form-error-page>/loginfailed</form-error-page>
 </form-login-config>
 </login-config>
 <security-constraint>
 <web-resource-collection>
 <web-resource-name>PublicContent</web-resource-name>
 <description>Publically available Content needs no authorization.</description>
 <url-pattern>/static/*</url-pattern>
 <url-pattern>/logout</url-pattern>
 <url-pattern>/loggedout</url-pattern>
 <url-pattern>/decorator</url-pattern>
 </web-resource-collection>
 </security-constraint>
 <security-constraint>
 <web-resource-collection>
 <web-resource-name>Add Requests</web-resource-name>
 <description>accessible by employees</description>
 <url-pattern>/requestadd</url-pattern>
 <url-pattern>/requestaddreal</url-pattern>
 <url-pattern>/orderadd</url-pattern>
 </web-resource-collection>
 <auth-constraint>
 <role-name>employees</role-name>
 </auth-constraint>
 </security-constraint>
 <security-constraint>
 <web-resource-collection>
 <web-resource-name>Add Bids</web-resource-name>
 <description>accessible by suppliers</description>
 <url-pattern>/bidadd</url-pattern>
 </web-resource-collection>
 <auth-constraint>
 <role-name>suppliers</role-name>
 </auth-constraint>
 </security-constraint>
 <security-constraint>
 <web-resource-collection>
 <web-resource-name>Webapplication</web-resource-name>
 <description>accessible by authorized users</description>
 <url-pattern>/*</url-pattern>
 </web-resource-collection>
 <auth-constraint>
 <description>For Employees and Suppliers</description>
 <role-name>employees</role-name>
 <role-name>suppliers</role-name>
 </auth-constraint>
 </security-constraint>
 <!-- [...] -->
 <ejb-local-ref>
 <ejb-ref-name>ejb/Dao</ejb-ref-name>
 <local>ejb.dao.DaoLocal</local>
 </ejb-local-ref>
 <!-- [... other ejb-local-ref ...] -->
</web-app>
1 ответ

Вы видели эту страницу: Как защитить веб-сервисы на GlassFish 2?

Вы также должны добавить элементы в sun-ejb-jar.xml для своих EJB для проверки подлинности. Вы тоже это сделали?

licensed under cc by-sa 3.0 with attribution.