我正在JBoss AS7服务器上使用Struts 2和Rest服务开发一个小型JavaEE应用程序。我对REST和Web内容使用FORM auth,REST没有任何问题,但在Web上,我必须区分"manager"和"admin"角色,以便向管理员用户显示一些额外的选项。我想做的事情是:
"manager"
"admin"
<s:if test="#request.isUserInRole("admin")>
但它不起作用。你知道有什么方法可以让我实现这样的事情吗?我应该如何区分JSP页面中的角色?
zengzsys1#
您可以使用PrincipalAware通过用于呈现JSP的操作来实现它。当您在操作中实现它时,Struts2会将PrincipalProxy对象注入到您的操作中。请确保将servlet-config interceptor应用到该操作。
PrincipalAware
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中找到此对象,并执行以下操作
valueStack
<s:if test="principal.isUserInRole('admin')">
您也可以从How do I obtain security details (JAAS).访问此信息
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')">
2条答案
按热度按时间zengzsys1#
您可以使用
PrincipalAware
通过用于呈现JSP的操作来实现它。当您在操作中实现它时,Struts2会将PrincipalProxy
对象注入到您的操作中。请确保将servlet-config
interceptor应用到该操作。然后,您可以在JSP页面上的
valueStack
中找到此对象,并执行以下操作您也可以从How do I obtain security details (JAAS).访问此信息
9udxz4iz2#
我是这样解决的:
导入:
然后将请求与以下内容堆叠:
和检查角色: