问题描述
我有一个非常简单的MDB,只要不安全地读取消息的队列,它就可以正常工作
I have a MDB very simple which works fine as long as the queue from where it reads messages is not secured
使用用户名保护队列后,它将无法再读取消息
After I secure the Queue with a username it can;t read messages anymore
@MessageDriven(mappedName = "DistributedQueueTest")
public class MdbReceiver implements MessageListener {
@Resource
private MessageDrivenContext mdc;
@Override
public void onMessage(Message inMessage) {
TextMessage msg = null;
try {
msg = (TextMessage) inMessage;
System.out.println("Test MdbReceiver Message received : " + msg.getText());
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
}
}
}
我尝试了各种@RunAs批注@weblogic.jws.security.RunAs(role="Joan",mapToPrincipal="ccc_user")
允许ccc_user从队列中读取消息
I tried with all kind of @RunAs annotations@weblogic.jws.security.RunAs(role="Joan",mapToPrincipal="ccc_user")
where ccc_user is alowed to read messages from the queue
import javax.annotation.security.RunAs;@RunAs("SomeRole")
给我一个部署错误无法部署EJB:mdbReceiver.jar中的MdbReceiver:映射中的预期角色
import javax.annotation.security.RunAs;@RunAs("SomeRole")
gives me an error on deploymentUnable to deploy EJB: MdbReceiver from mdbReceiver.jar: Expected role in mapping
任何想法我该如何使用注释?我尝试了即使没有注释...与weblogic控制台中的实例相同
Any idea how can i do this with annotations ? I tried even without annotations...same the exeption in weblogic console is
weblogic.jms.common.JMSSecurityException: Access denied to resource: type=<jms>, application=UNIV_REC_Module, destinationType=queue, resource=DistributedQueueTest, action=receive
谢谢
推荐答案
如果您对MDB进行如下注释,则它应该可以工作:
If you annotate your MDB as follows it should work:
@MessageDriven(name = "MdbReceiver", mappedName = "DistributedQueueTest")
@DeclareRoles({"Loan"})
@RolesAllowed("Loan")
public class MdbReceiver implements MessageListener {
...
}
这篇关于从安全队列@RunAs读取Weblogic消息驱动的Bean不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!