gpt4 book ai didi

java - OpenEJB 和 JUnit : Sessioncontext. isCallerInRole 始终返回 false

转载 作者:行者123 更新时间:2023-12-01 05:50:19 24 4
gpt4 key购买 nike

我需要编写一个 session bean,在代码中的某个位置检查当前用户是否具有某些角色。

为了对我的 EJB3 进行单元测试,我正在尝试 OpenEJB。我按照他们的例子 testing security但如果我在代码中使用 SessionContect.isCallerInRole() 测试角色,它总是返回 false。

为什么不起作用?

我写了一些代码来说明。

我的本​​地界面:

@Local
public interface MyBean {

boolean doSomething();

}

我的EJB:

@Stateless
public class MyBeanImpl implements MyBean {

@Resource
private SessionContext sessionContext;

@Override
public boolean doSomething() {
return this.sessionContext.isCallerInRole("role1");
}

}

我的测试:

public class MyBeanTest {

private Context context;

@Before
public void setUp() throws Exception {
final Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");

this.context = new InitialContext(properties);
}

@Test
public void test1() throws Exception {
final Caller roleBean = (Caller) this.context.lookup("RoleBeanLocal");
roleBean.call(new Callable<Object>() {

@Override
public Object call() throws Exception {
final MyBean myBean = (MyBean) MyBeanTest.this.context.lookup("MyBeanImplLocal");
Assert.assertTrue(myBean.doSomething());
return null;
}
});
}

@Test
public void test2() throws Exception {
final Caller role2Bean = (Caller) this.context.lookup("Role2BeanLocal");
role2Bean.call(new Callable<Object>() {

@Override
public Object call() throws Exception {
final MyBean myBean = (MyBean) MyBeanTest.this.context.lookup("MyBeanImplLocal");
Assert.assertFalse(myBean.doSomething());
return null;
}
});
}

public static interface Caller {

<V> V call(Callable<V> callable) throws Exception;

}

@Stateless
@RunAs("role1")
public static class RoleBean implements Caller {

@Override
public <V> V call(final Callable<V> callable) throws Exception {
return callable.call();
}

}

@Stateless
@RunAs("role2")
public static class Role2Bean implements Caller {

@Override
public <V> V call(final Callable<V> callable) throws Exception {
return callable.call();
}

}
}

最佳答案

嗯,显然它不应该工作。这是规范的一部分,@RunAs 不会更改委托(delegate)人的权限。

我在 OpenEJB 论坛上发布了同样的问题(参见 Nabble )并在那里获得了更多信息以及更好的解决方案。

关于java - OpenEJB 和 JUnit : Sessioncontext. isCallerInRole 始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com