在我正在开发的项目中,我们使用OpenEJB作为测试EJB的框架.我们以InitialContext编程方式构造,并使用它来获取事务管理器和各种EJB.
但是,我现在必须测试的EJB有@RolesAllowed注释,因此OpenEJB拒绝获取该EJB,认为我没有所需的权限.
如何向OpenEJB指定此测试应该模拟的用户,以及与他相关的角色?
该@RunAsbkail提到的建议无疑是一个很好的路要走.不涉及内部类的第二种方法是登录测试用例.
引导OpenEJB时,请在InitialContext属性中指定user/pass,如下所示:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后可能再次作为不同的用户进行测试:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将a users.properties和groups.properties文件放在测试用例的类路径中来配置测试用户和组.在maven中,它位于以下位置:
该users.properties文件可能如下所示
joe=cool
jane=waterfall
Run Code Online (Sandbox Code Playgroud)
而groups.properties像这样
Manager=jane
Employee=jane,joe
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |