私は以下のサーブレットを持っています。サーブレットとEJB間の@RunAsの使用
@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>
Test
EJBは、以下TestBean
クラスによって実装されます。
@Stateless
@DeclareRoles("remote-guest")
public class TestBean implements Test {
@RolesAllowed("remote-guest")
public void guest() {
System.out.println("TestBean.guest()");
}
}
問題:私だけguest
役割にマップされているユーザーを使用してGuestServlet
を呼び出すとき、EJB、サーブレット上@RunAs
注釈の存在にもかかわらず、javax.ejb.EJBAccessException
をスローします。また、ユーザーをremote-guest
ロールにマッピングする必要がありますか?ユーザーがguest
とremote-guest
の両方にマッピングされる必要がある場合、@RunAs
の実際の目的は何ですか?