如何在 Struts 2 中使用 request.isUserInRole() 对 JSP 和 REST 服务上的用户进行授权?

问题描述 投票:0回答:2

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

我将

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

我想做这样的事情:

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

但是不起作用。

你知道有什么方法可以让我实现这样的目标吗?

我应该如何区分JSP页面中的角色?

authentication security jboss struts2 roles
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;
  }
}

这个对象然后你可以在JSP页面上的

valueStack
中找到并执行类似的操作

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

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


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')">
© www.soinside.com 2019 - 2024. All rights reserved.