我正在通过JBoss AS7服务器使用Struts 2和Rest Services开发一个小型Java EE应用程序。
我正在使用FORM auth进行REST和Web内容,我对REST没有任何问题,但在网络上,我必须按顺序区分"manager"
和"admin"
个角色向管理员用户显示一些额外的选项。
我想做点什么:
<s:if test="#request.isUserInRole("admin")>
但它不起作用。
你知道吗,所以我可以做到这样的事情吗?我如何区分JSP页面中的角色?
答案 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')">
访问此信息
答案 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')">