2014-09-26 58 views
0

我有一个关于@RunAs的简单问题。@RunAs注解在Servlet上使用

除了EJB,我可以在Servlet上使用@RunAs来传播安全角色吗?例如,作为:

我有一个公共的servlet:

@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在它上面,它应该有一个合适的角色“Admin”从Web请求中调用EJB保护的方法,我对这个例子是否正确?或者我需要其他更多配置?

感谢,

回答

0

你需要特定的用户映射到角色roleOnServlet这个用户必须是也Admin作用。要么是一个错字,要么你有两个不同的角色roleOnServlet!= Admin。 通常在servlet中使用与必须调用的EJB中相同的角色名称。与你的情况一样,虽然servlet将以roleOnServlet角色的用户身份运行,但他不一定必须同时处于Admin角色中,这将导致错误。

@RunAs不会更改当前用户具有该角色,而是使用单独的用户,该用户必须是映射到roleOnServlet角色的用户之一。

将用户映射到runAs角色是特定于容器的,因此如果您需要帮助,请添加您使用的服务器的信息。