Мой бит сеанса имеет несколько методов. Некоторые из них могут быть доступны только ролью ADMIN, другие могут также выполняться ролью USER.Как вызвать метод bean-сессии с определенной ролью при вызове из MDB?
@Stateless
@DenyAll
public class MyBean {
...
@RolesAllowed({"ADMIN"})
public void foo() { ... }
@RolesAllowed({"ADMIN", "USER"})
public void bar() { ... }
}
Этот сеансовый компонент вызывается сообщением, управляемым 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 не имеют учетных данных, связанных с ними, я не могу передать безопасность сеансовому компоненту. Сейчас я передаю роль пользователя как часть сообщения. Но как я могу выполнять роль роли, которую я указал?