@RunAs
제안 bkail 언급은 확실히 좋은 방법입니다. 내부 클래스를 포함하지 않는 두 번째 방법은 테스트 케이스에 로그인하는 것입니다.
당신이 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.properties
및 groups.properties
파일을 넣어 사용자 및 그룹을 평가합니다. 받는다는에서 그 다음 위치에있을 것입니다 :
- SRC/테스트/자원/users.properties
- SRC/테스트/자원/groups.properties
users.properties
파일처럼 보일 수 있습니다 그래서
등이
joe=cool
jane=waterfall
그리고
그래서 LocalInitialContextFactory를 생성하면 스레드 보안 컨텍스트가 설정되고 닫히면 종료됩니다. 흥미 롭 군. 글쎄, 나는 그것이 OpenEJB 예제 페이지에 속해 있다고 생각한다 ;-). –
좋은 생각 같습니다. 나는 직장에서 그것을 시도 할 것이고, 그것이 나의 문제를 해결한다면 당신에게 현상금을 줄 것이다. :) –
그것은 완벽하게 일했습니다. 덕분에 너무 많이! –