jboss Struts 2访问请求.isUserInRole

k5ifujac  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(105)

我正在JBoss AS7服务器上使用Struts 2和Rest服务开发一个小型JavaEE应用程序。
我对REST和Web内容使用FORM auth,REST没有任何问题,但在Web上,我必须区分"manager""admin"角色,以便向管理员用户显示一些额外的选项。
我想做的事情是:

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

但它不起作用。
你知道有什么方法可以让我实现这样的事情吗?我应该如何区分JSP页面中的角色?

zengzsys

zengzsys1#

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

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).访问此信息

9udxz4iz

9udxz4iz2#

我是这样解决的:
导入:

<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')">

相关问题