簡體   English   中英

如何以編程方式在OpenEJB中指定我的用戶/角色?

[英]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.propertiesgroups.properties文件放在測試用例的類路徑中來配置測試用戶和組。 在maven中,它位於以下位置:

  • SRC /測試/資源/ users.properties
  • SRC /測試/資源/ groups.properties

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM