4

我正在通过 JBoss AS7 服务器使用 Struts 2 和 Rest Services 开发一个小型 Java EE 应用程序。

我对 REST 和 Web 内容使用 FORM auth,我对 REST 没有任何问题,但是在 Web 上,我必须区分角色"manager""admin"角色,以便向管理员用户显示一些额外的选项。

我想做类似的事情:

<s:if test="#request.isUserInRole("admin")>

但它不起作用。

你知道有什么方法可以让我实现这样的目标吗?我应该如何区分我的 JSP 页面中的角色?

4

2 回答 2

1

您可以PrincipalAware通过用于呈现 JSP 的操作来实现它。当您在动作中实现它时,Struts2 会将PrincipalProxy对象注入到您的动作中。确保将servlet-config拦截器应用于操作。

public class MyAction extends ActionSupport implements PrincipalAware {

  protected PrincipalProxy principal;

  public void setPrincipalProxy(PrincipalProxy principalProxy) {
    this.principal = principalProxy;
  }

  public PrincipalProxy getPrincipal() {
    return principal;
  }
}

然后你可以在valueStackJSP 页面上找到这个对象并执行类似的操作

<s:if test="principal.isUserInRole('admin')">

您还可以从我如何获取安全详细信息 (JAAS) 中访问此信息。

于 2013-06-08T09:53:16.667 回答
0

我以这种方式解决了它:

输入:

<jsp:directive.page import="com.opensymphony.xwork2.util.ValueStack"/>
<jsp:directive.page import="com.opensymphony.xwork2.ActionContext"/>
<jsp:directive.page import="org.apache.struts2.ServletActionContext"/>

然后堆叠请求:

<jsp:scriptlet><![CDATA[
ValueStack stack = ActionContext.getContext().getValueStack();
 stack.set("httpServletRequest", ServletActionContext.getRequest());
]]></jsp:scriptlet>

并检查角色:

<s:if test="httpServletRequest.isUserInRole('admin')">
于 2013-06-08T11:16:25.247 回答