4

JBoss AS7 サーバー上で Struts 2 と Rest Services を使用して小さな Java EE アプリケーションを開発しています。

私は REST と Web コンテンツに FORM 認証を使用しており、REST には何の問題もありませんが、Web では管理者ユーザーにいくつかの追加オプションを表示するためにロール"manager"とロールを区別する必要があります。"admin"

私は次のようなことをしたいと思います:

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

しかし、うまくいきません。

このようなことを達成できる方法を知っていますか?JSP ページでロールを区別するにはどうすればよいですか?

4

2 に答える 2

1

PrincipalAwareJSP のレンダリングに使用されるアクションによって実装するために使用できます。アクションに実装すると、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;
  }
}

valueStackこのオブジェクトは、JSPページで見つけて、次のようなことを行うことができます

<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 に答える