У меня есть следующий сервлет.
@DeclareRoles("remote-guest")
@RunAs("remote-guest")
public class GuestServlet extends HttpServlet {
@EJB
private Test test;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
test.guest();
}
}
Сервлет отображается так, что только пользователи с ролью guest
могут вызывать его.
<servlet>
<servlet-name>guest-servlet</servlet-name>
<servlet-class>test.web.GuestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>guest-servlet</servlet-name>
<url-pattern>/guest</url-pattern>
</servlet-mapping>
<security-role>
<role-name>guest</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>guest-resources</web-resource-name>
<url-pattern>/guest</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>guest</role-name>
</auth-constraint>
</security-constraint>
EJB Test
реализуется следующим классом TestBean
.
@Stateless
@DeclareRoles("remote-guest")
public class TestBean implements Test {
@RolesAllowed("remote-guest")
public void guest() {
System.out.println("TestBean.guest()");
}
}
Проблема: когда я вызываю GuestServlet
, используя пользователя, который сопоставлен только с ролью guest
, EJB бросаетjavax.ejb.EJBAccessException
несмотря на наличие аннотации @RunAs
на сервлете.Должен ли я также сопоставить пользователя с ролью remote-guest
?Если пользователь должен быть сопоставлен с guest
и remote-guest
, какова реальная цель @RunAs
?