Struts 2访问request.isUserInRole

时间:2013-06-08 08:49:28

标签: java-ee authentication struts2 jboss roles

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

我正在使用FORM auth进行REST和Web内容,我对REST没有任何问题,但在网络上,我必须按顺序区分"manager""admin"个角色向管理员用户显示一些额外的选项。

我想做点什么:

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

但它不起作用。

你知道吗,所以我可以做到这样的事情吗?我如何区分JSP页面中的角色?

2 个答案:

答案 0 :(得分: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;
  }
}

然后,您可以在JSP页面上的valueStack中找到此对象,并执行类似

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

您也可以从How do I obtain security details (JAAS).

访问此信息

答案 1 :(得分: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')">