我的 Session bean 定义了几个方法。有些只能由 ADMIN 角色访问,有些也可以由 USER 角色访问。
@Stateless
@DenyAll
public class MyBean {
...
@RolesAllowed({"ADMIN"})
public void foo() { ... }
@RolesAllowed({"ADMIN", "USER"})
public void bar() { ... }
}
此会话 bean 由消息驱动 bean 调用。
@MessageDriven(...)
public class MyListener implements MessageListener {
public onMessage(Message message) {
MapMessage msg = (MapMessage) message;
String role = msg.getString("role");
String action = msg.getString("action");
if ("ADMIN".equals(role)) {
if ("foo".equals(action)) {
// TODO: call as ADMIN role!
myBean.foo();
}
else if ("bar".equals(action)) {
// TODO: call as ADMIN!
myBean.bar();
}
}
else if (role.equals("USER")) {
if ("foo".equals(action)) {
// TODO: call as USER role!
myBean.foo();
}
else if ("bar".equals(action)) {
// TODO: call as USER!
myBean.bar();
}
}
}
@EJB
MyBean myBean;
}
由于 MDB 没有与之关联的凭据,因此我无法将安全性传播到会话 bean。现在我将用户的角色作为消息的一部分传递。但是我如何执行我指定的角色呢?