gpt4 book ai didi

java - 如何以编程方式在 OpenEJB 中指定我的用户/角色?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:09 25 4
gpt4 key购买 nike

在我正在进行的项目中,我们使用 OpenEJB 作为框架来测试我们的 EJB。我们以编程方式构造一个 InitialContext,并使用它来获取事务管理器和各种 EJB。

但是,我现在必须测试的 EJB 具有 @RolesAllowed 注释,因此 OpenEJB 拒绝获取该 EJB,认为我没有所需的权限。

我如何向 OpenEJB 指定此测试应该模拟的用户,以及与他关联的角色?

最佳答案

bkail 提到的@RunAs 建议绝对是一个好方法。不涉及内部类的第二种方法是在测试用例中登录。

登录方式

当您引导 OpenEJB 时,在 InitialContext 属性中指定用户/密码,如下所示:

public void testAsManager() throws Exception {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
p.put(Context.SECURITY_PRINCIPAL, "jane");
p.put(Context.SECURITY_CREDENTIALS, "waterfall");

InitialContext context = new InitialContext(p);

try {
movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));

List<Movie> list = movies.getMovies();
assertEquals("List.size()", 3, list.size());

for (Movie movie : list) {
movies.deleteMovie(movie);
}

assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
} finally {
context.close();
}
}

然后可能以不同的用户再次测试:

public void testAsEmployee() throws Exception {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
p.put(Context.SECURITY_PRINCIPAL, "joe");
p.put(Context.SECURITY_CREDENTIALS, "cool");

InitialContext context = new InitialContext(p);

try {
movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));

List<Movie> list = movies.getMovies();
assertEquals("List.size()", 3, list.size());

for (Movie movie : list) {
try {
movies.deleteMovie(movie);
fail("Employees should not be allowed to delete");
} catch (EJBAccessException e) {
// Good, Employees cannot delete things
}
}

// The list should still be three movies long
assertEquals("Movies.getMovies()", 3, movies.getMovies().size());
} finally {
context.close();
}
}

测试用户和组

您可以通过将 users.propertiesgroups.properties 文件放入测试用例的类路径来配置测试用户和组。在 Maven 中,它位于以下位置:

  • src/test/resources/users.properties
  • src/test/resources/groups.properties

users.properties 文件可能如下所示

joe=cool
jane=waterfall

groups.properties这样

Manager=jane
Employee=jane,joe

关于java - 如何以编程方式在 OpenEJB 中指定我的用户/角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660953/

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