如何根据用户使用Tile3的规则显示不同的菜单

时间:2013-05-09 04:02:28

标签: struts2 spring-security tiles

我正在使用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的定义,menu属性应该根据请求者的角色动态改变,或者任何其他方式使其更简单。

我使用以下内容来定义每个角色的可访问部分

<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 "";


    }

}

1 个答案:

答案 0 :(得分:1)

使用以下

 <put-attribute name="header" expression="OGNL:@com.project.Default@getRole() + '.jsp'"/>