我有一个关于@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”,我对这个例子是否正确?或者我需要其他更多配置?
谢谢,
答案 0 :(得分:0)
您需要将特定用户映射到roleOnServlet
角色,此用户也必须处于Admin
角色。要么它是一个拼写错误,要么你有2个不同的角色roleOnServlet
!= Admin
。
通常,在servlet中使用与必须调用的EJB中相同的角色名称。在您的情况下,虽然servlet将以roleOnServlet
角色的用户身份运行,但他不一定必须同时处于Admin
角色,这将导致错误。
@RunAs
并未将当前用户更改为具有该角色,而是使用单独的用户,该用户必须是映射到roleOnServlet
角色的用户之一。
将用户映射到runAs角色是特定于容器的,因此如果您需要帮助,请添加您正在使用的服务器的信息。