2014-09-26 4 views
0

@RunAs에 관해 간단한 질문이 있습니다.서블릿에서 @RunAs 주석 사용

EJB 외에도 Servlet에서 @RunAs를 사용하여 보안 역할을 전파 할 수 있습니까? 예를 들어 같이

@WebServlet(name = "RunAsServlet", urlPatterns = "/runAs") 
@RunAs("Admin") 
public class RunAsServlet extends HttpServlet { 

@EJB 
private MyEjb ejb; 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    resp.getWriter().write(ejb.doSomething()); 
    } 
} 

그리고는 EJB가 보호 역할에서 "관리":

나는 공공 서블릿이

@Stateless 
@RolesAllowed("Admin") 
public class MyEjb { 

@Resource 
private SessionContext sessionContext; 

public String doSomething() { 

이 경우를, 내가 전화를 할 수 있어야한다 RunAsServlet은 @RunAs가 있기 때문에, 웹 요청으로부터 EJB 보호 메소드를 호출하는 적절한 역할 "Admin"을 가져야합니다.이 예제에 대해 필자는 맞습니까? 아니면 다른 구성이 더 필요합니까?

덕분에,

답변

0

당신은 roleOnServlet 역할에 특정 사용자를 매핑해야하고이 사용자는 Admin 역할도해야합니다. 오타 또는 두 가지 역할이 있습니다 roleOnServlet! = Admin. 일반적으로 호출해야하는 EJB와 동일한 역할 이름을 서블릿에서 사용합니다. 귀하의 경우처럼 서블릿이 roleOnServlet 역할의 사용자로 실행되지만 그는 동시에 오류로 이어질 Admin 역할에있을 필요는 없습니다.

@RunAs은 현재 사용자에게 해당 역할이 변경되지 않지만 별도의 사용자 (roleOnServlet 역할에 매핑 된 사용자 중 하나 여야 함)를 사용하고 있습니다.

사용자를 runAs 역할에 매핑하는 것은 컨테이너마다 다르므로 도움이 필요하면 사용중인 서버에 대한 정보를 추가하십시오.