我有一个关于@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在它上面,它应该具有适当的角色"Admin“来从web请求中调用EJB受保护的方法,我对这个例子正确吗?或者我需要其他更多的配置?
谢谢,
发布于 2014-09-26 19:49:20
您需要将特定用户映射到roleOnServlet角色,并且此用户还必须属于Admin角色。要么是打字错误,要么是你有两个不同的角色roleOnServlet != Admin。通常,在servlet中使用的角色名称与在EJB中必须调用的角色名称相同。在您的示例中,尽管servlet将以roleOnServlet角色中的用户身份运行,但他不必同时处于Admin角色中,这将导致错误。
@RunAs不会将当前用户更改为具有该角色,而是使用单独的用户,该用户必须是映射到roleOnServlet角色的用户之一。
用户到runAs角色的映射是特定于容器的,因此如果您在这方面需要帮助,请添加您使用的服务器的信息。
https://stackoverflow.com/questions/26057803
复制相似问题