@RunAs注释用于Servlet

时间:2014-09-26 10:48:11

标签: java security servlets ejb runas

我有一个关于@RunAs的简单问题。

除了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受角色“Admin”保护:

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

@Resource
private SessionContext sessionContext;

public String doSomething() {

在这种情况下,我应该可以调用RunAsServlet,因为@RunAs就在它上面,它应该具有从Web请求调用EJB保护方法的正确角色“Admin”,我对这个例子是否正确?或者我需要其他更多配置?

谢谢,

1 个答案:

答案 0 :(得分:0)

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

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

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