我正在 JBoss AS7 服务器上使用 Struts 2 和 REST 服务开发一个小型 Java EE 应用程序。
我将
FORM auth
用于 REST 和 Web 内容,我对 REST 没有任何问题,但在网络上,我必须区分 manager
和 admin
角色,以便显示一些额外的内容管理员用户的选项。
我想做这样的事情:
<s:if test="#request.isUserInRole("admin")>
但是不起作用。
你知道有什么方法可以让我实现这样的目标吗?
我应该如何区分JSP页面中的角色?
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')">
我是这样解决的:
导入:
<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')">