![](/img/trans.png)
[英]Liferay 6.1 - How to programatically assign a role to a user (in a hook)
[英]How to programatically specify my user/role in OpenEJB?
在我正在開發的項目中,我們使用OpenEJB作為測試EJB的框架。 我們以編程方式構造一個InitialContext
,並使用它來獲取事務管理器和各種EJB。
但是,我現在必須測試的EJB有@RolesAllowed
注釋,因此OpenEJB拒絕獲取該EJB,認為我沒有所需的權限。
如何向OpenEJB指定此測試應該模擬的用戶,以及與他相關的角色?
@RunAs
建議bkail提到絕對是一個很好的方法。 不涉及內部類的第二種方法是登錄測試用例。
引導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();
}
}
然后可能再次作為不同的用戶進行測試:
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.properties
和groups.properties
文件放在測試用例的類路徑中來配置測試用戶和組。 在maven中,它位於以下位置:
users.properties
文件可能如下所示
joe=cool
jane=waterfall
和groups.properties
一樣
Manager=jane
Employee=jane,joe
請參閱OpenEJB 測試安全性示例 。 基本上,您是間接通過沒有@RolesAllowed的測試bean,但在調用第二個bean之前使用@RunAs來切換角色。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.