我正在使用 tile3、spring security 和 struts2。我有不同数量的用户,每个都有特定的角色,每个角色都应该可以访问特定的菜单,我有以下 tile.xml 文件,但我不确定如何更改它以解决问题。
如果您需要我提供代码的任何其他部分,请告诉我。
<tiles-definitions>
<definition name="baseLayout" template="/baseLayout.jsp">
<put-attribute name="title" value=""/>
<put-attribute name="header" value="/header.jsp"/>
<put-attribute name="menu" value=""/>
<put-attribute name="body" value=""/>
<put-attribute name="footer" value="/footer.jsp"/>
<put-attribute name="register" value="/register.jsp"/>
</definition>
<definition name="register1" extends="baseLayout">
<put-attribute name="menu" value="/menuAdmin.jsp"/>
<put-attribute name="body" value="/body.jsp"/>
</definition>
<definition name="register2" extends="baseLayout">
<put-attribute name="menu" value="/menuUser.jsp"/>
<put-attribute name="body" value="/body.jsp"/>
</definition>
.....
由于我的应用程序有许多不同的页面,我必须为每个用户角色的每个请求创建一个单独的定义。例如,应该只有一个名为 register 的定义,并且菜单属性应该根据请求者的角色动态更改,或者任何其他使其更简单的方式。
我正在使用以下内容来定义每个角色的可访问部分
<http auto-config="true" access-denied-page="/notFound.jsp" use-expressions="true">
<intercept-url pattern="/Profile/view*" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/Search/view*" access="hasRole('ROLE_ADMIN')" />
<form-login login-page="/index"
authentication-failure-url="/index?error=1"
default-target-url="/default"/>
<logout logout-success-url="/index.jsp"/>
</http>
我可以使用以下代码找到登录用户的角色
@Action
public class Default {
public String execute(){
String role =
SecurityContextHolder.getContext().getAuthentication().getAuthorities().toString();
System.out.println("User's role:"+role);
if(role.equalsIgnoreCase("[ROLE_ADMIN]"))
return "Admin";
return "";
}
}