繁体   English   中英

@RunAs用于@WebService EJB

@RunAs for @WebService EJB

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个匿名的WebService EJB - webservice调用工作正常。

现在我希望WebService将RunAs作为特定的SecurityRole。

在Webservice我有以下注释:

@Stateless
@WebService
@DeclareRoles({ "LoggedUser" })
@SecurityDomain("my-jboss-real")
@RunAs("LoggedUser")
public class MyWebService { ...

现在我想从@RolesAllowed({"LoggedUser"})服务方法访问带有@RolesAllowed({"LoggedUser"})@EJB ,我得到:

ERROR [org.jboss.aspects.tx.TxPolicy] javax.ejb.EJBTransactionRolledbackException: javax.ejb.EJBAccessException.message: 'Caller unauthorized'
WARN  [org.jboss.ejb3.stateless.StatelessBeanContext] EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected
ERROR [org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS] SOAP request exception
javax.ejb.EJBTransactionRolledbackException: javax.ejb.EJBAccessException.message: 'Caller unauthorized'
        at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:115)

我正在使用JBoss 5.1GA

这是@RunAs的正确用法还是有另一种方法可以做到这一点。

编辑

添加:

@Resource
private WebServiceContext wsCtx;
@Resource
private EJBContext ejbCtx;

myWebServiceMethod(){
     ...
     System.out.println("EJBCtx: " + ejbCtx.getCallerPrincipal());
     System.out.println("EJBCtx: " + ejbCtx.isCallerInRole("LoggedUser"));
     System.out.println("WebContext: " + wsCtx.getUserPrincipal());
     System.out.println("WebContext: " + wsCtx.isUserInRole("LoggedUser"));
     ...

此输出:

EJBCtx: anonymous
EJBCtx: false
WebContext: anonymous
WebContext: false
1 个回复

除了最基本的用例之外,JBoss AS 5和尤其是6在安全上下文和@RunAs方面都非常缺陷。

在AS 7中修复了大量这些错误。您可以尝试在那里设置测试用例,看看是否遇到了同样的问题。

要意识到@RunAs不适用于在应用了注释的bean中运行的代码。 相反,它仅适用于从该bean调用的bean。 您可以将其视为“传出/传出”角色。

更麻烦的是Java EE有一个严重的遗漏,那就是没有办法定义RunAs 身份 当您为“未经身份验证的”身份定义RunAs角色时,某些服务器的反应不佳。 JBoss具有RunAs标识的专有注释。 如果这会让您更进一步,您可能想尝试一下。

1 EJB中的RoleAllowed和RunAs如何工作?

在安全Java EE应用程序中,有: 3 EJB:B1,B2和B3 3种方法:B1中的m1,B2中的m2和B3中的m3 执行路径:m1->(m2-> m3)。 这意味着:m1调用m2,m2调用m3。 安全配置: 2个角色:学生和教授 ...

2 无法使@RunAs在EJB中工作

这是Websphere上@Startup EJB的用户上下文的后续操作 我有以下情况: EJB 1: EJB 2: 简而言之:我有一个要求角色“ SomeRole”的EJB,还有一个使用@RunAs来使用该角色的启动EJB。 据我了解@RunAs这应该工作。 ...

3 EJB3 @RunAs批注和安全性

@RunAs批注仅允许通过指定角色的名称来访问Bean。 这意味着任何外国客户只要指向角色名称就能够轻松访问我的bean,不是吗? 我想调用者和bean位于不同的服务器上。 那么,如果很容易伪造客户端,@ RunAs需要做什么呢? 或者,如果我错了,怎么正确使用呢? ...

4 在servlet和EJB之间使用@RunAs

我有以下servlet。 映射servlet,以便只有具有角色guest用户才能调用它。 Test EJB由以下TestBean类实现。 问题:当我使用仅映射到guest角色的用户调用GuestServlet时,尽管servlet上存在@RunAs注释,但EJB Gues ...

5 别名用于runas的DOS命令

我希望能够将dos命令别名与runas命令一起使用 特别是我厌倦了获得BIDS的完整路径( "C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\devenv.exe" ),我ssms MS为ssms做的ssms 。 ...

2010-08-13 18:31:39 3 2926   alias/ dos
6 从@WebService带注释的EJB访问@SessionScoped bean

我的一位合作伙伴需要SOAP接口,所以我想:让我们移至应用服务器。 我选择了Glassfish,它开箱即用。 我无法做到的只有一件事:将@SessionScoped ManagedBean注入到@Webservice带注释的EJB中。 我可以访问EJB的唯一方法是通过JNDI。 我在 ...

8 Websphere 7上的EJB @Stateless和@WebService

我正在寻找各地试图找出如何将无状态会话bean转换为JAX-WS Web服务(我使用的是WAS 7,Websphere Integration Developer,EJB 3)。 不是Jax-RPC。 我正式厌倦了与WID附带的向导搞乱。 出于某种原因,它根本不会让我这样做...我尝试从J ...

9 如何在Webservice中使用EJB3

我在eclipse id中创建了一个EJB项目,该项目是从数据库检索数据并将数据写入数据库。 我使用JPA完成了该数据库处理部分。 现在,我要将其转换为Web服务。 我用谷歌搜索了两天,但每位向导都把我困在了很多问题上。 一些教程说,只需将@webservice和@webmethod注释 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM