码迷,mamicode.com
首页 > 其他好文 > 详细

权限模块_使用权限_实现主页面的效果_显示左侧菜单&只显示有权限的菜单项

时间:2017-11-12 00:25:46      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:mil   dao   single   doctype   view   nal   int   fun   nsa   

权限模块__使用权限__实现主页面的效果

技术分享

技术分享

HomeAction.java

public class HomeAction extends ActionSupport {
    public String index() {
        return "index";
    }
    public String top() {
        return "top";
    }
    public String bottom() {
        return "bottom";
    }
    public String leaf() {
        return "leaf";
    }
    public String right() {
        return "right";
    }
}

index.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>Itcast OA</title>
        <%@ include file="/WEB-INF/jsp/public/commons.jspf"%>
        <script type="text/javascript"
            src="${pageContext.request.contextPath}/script/jquery_treeview/jquery.cookie.js"></script>
    </head>

    <frameset rows="100,*,25" framespacing=0 border=0 frameborder="0">
        <frame noresize name="TopMenu" scrolling="no"
            src="${pageContext.request.contextPath}/home_top.action">
        <frameset cols="180,*" id="resize">
            <frame noresize name="menu" scrolling="yes"
                src="${pageContext.request.contextPath}/home_left.action">
            <frame noresize name="right" scrolling="yes"
                src="${pageContext.request.contextPath}/home_right.action">
        </frameset>
        <frame noresize name="status_bar" scrolling="no"
            src="${pageContext.request.contextPath}/home_bottom.action">
    </frameset>

    <noframes>
        <body>
        </body>
    </noframes>
</html>

top.jsp

 

bottom.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
    <title></title>
    <LINK href="${pageContext.request.contextPath}/style/blue/statusbar.css" type=text/css rel=stylesheet>
</head>

<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>

<div id="StatusBar">
    <div id="Online">
        在线人员:共 <span class="OnlineUser" id="onlineUserNum"></span><span class="OnlineView">
        <a href="javascript:void(0)">[查看在线名单]</a>
</span></div>

    <div id="Info">
        <a href="http://www.itcast.cn" title = "传智播客首页" target=_blank >传智播客首页</a> |
        <a href="http://bbs.itcast.cn" title = "传智播客BBS" target=_blank >传智播客BBS</a>
    </div>

    <DIV id=DesktopText>
        <a href="javascript:void(0)"><img border="0" src="${pageContext.request.contextPath}/style/images/top/text.gif"/> 便笺</a>

        <span id=TryoutInfo>

        </span>
        <span id="Version">
            <a href="javascript:void(0)">
                <img border="0" width="11" height="11" src="${pageContext.request.contextPath}/style/images/top/help.gif" />
                <img border="0" width="40" height="11" src="${pageContext.request.contextPath}/style/blue/images/top/version.gif" />
            </a>
        </span>
    </DIV>
</div>

</body>
</html>

left.jsp

 

right.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>无标题文档</title>
    </head>

    <body>
    </body>
</html>

WebRoot下的index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%-- 重定向到指定的页面,访问另外一个地址,request.getContextPath()加上当前应用程序名称
    转发:相当于方法调用,在一个应用程序内执行
--%>
<%
    response.sendRedirect(request.getContextPath() + "/home_index.action");
%>

再次访问首页http://localhost:8080/ItcastOA重定向到了http://localhost:8080/ItcastOA/home_index.action

权限模块_使用权限_显示左侧菜单1

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>导航菜单</title>
        <%@ include file="/WEB-INF/jsp/public/commons.jspf"%>
        <link type="text/css" rel="stylesheet" href="style/blue/menu.css" />
    </head>
    <body style="margin: 0">
        <div id="Menu">
            <ul id="MenuUl">
                <%--显示一级菜单 --%>
                <s:iterator value="#application.topPrivilegeList">
                    <li class="level1">
                        <div onClick="menuClick(this);" class="level1Style">
                            <img src="style/images/MenuIcon/FUNC20082.gif" class="Icon" />
                            ${name}
                        </div>
                        <ul style="display: none;" class="MenuLevel2">
                            <%-- 显示二级菜单 --%>
                            <s:iterator value="children">
                            <li class="level2">
                                <div class="level2Style">
                                    <img src="style/images/MenuIcon/menu_arrow_single.gif" />
                                    <a target="right" href="System_Role/list.html"> 岗位管理</a>
                                </div>
                            </li>
                            </s:iterator>
                        </ul>
                    </li>
                </s:iterator>
            </ul>
        </div>
    </body>
</html>

InitListener.java

public class InitListener implements ServletContextListener {
    
    //获取容器与相关的Service对象
    
    public void contextInitialized(ServletContextEvent sce) {
        ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); 
        
        PrivilegeService privilegeService = (PrivilegeService) ac.getBean("privilegeServiceImpl");
        
        //找到所有的顶级列表,放到最大的作用域中
        //准备数据:topPrivilegeList
        List<Privilege> topPrivilegeList = privilegeService.findTopList();
        sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
        System.out.println("-----------> 已准备数据 <-----------");
        
    }

    public void contextDestroyed(ServletContextEvent arg0) {
        
    }

}

PrivilegeService.java

public interface PrivilegeService extends DaoSupport<Privilege> {
    //查询所有顶级的权限
    List<Privilege> findTopList();
}

PrivilegeServiceImpl.java

@Service
@Transactional
public class PrivilegeServiceImpl extends DaoSupportImpl<Privilege> implements PrivilegeService{

    public List<Privilege> findTopList() {
        return getSession().createQuery(//
                "FROM Privilegea p WHERE p.parent IS NULL")//
                .list();
    }
}

web.xml增加

   <!-- 用于做初始化工作的监听器,一定要配置到spring的 contextConfigLocation之后,因为要用到spring的容器对象-->
    <listener>
        <listener-class>cn.itcast.oa.util.InitListener</listener-class>
    </listener>

懒加载

登录时加载了用户,用户关联的对象都没有加载,但在第二个请求又访问了用户关联的对象,抛懒加载异常

Privilege.hbm.xml

技术分享

User.hbm.xml

技术分享

Role.hbm.xml

技术分享

访问http://localhost:8080/ItcastOA/home_index.action

技术分享

全部显示

技术分享

技术分享

图标问题

技术分享

技术分享

技术分享

打开收回

技术分享

权限模块__使用权限__显示左侧菜单2__只显示有权限的菜单项

leaf.jsp

 

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>导航菜单</title>
        <%@ include file="/WEB-INF/jsp/public/commons.jspf"%>
        <link type="text/css" rel="stylesheet" href="style/blue/menu.css" />
        <script type="text/javascript">
            function menuClick(menu){
                //$("#aa").hide();
                //$("#aa").show();
                $(menu).next().toggle();
            }
        
        </script>
        
    </head>
    <body style="margin: 0">
        <div id="Menu">
            <ul id="MenuUl">
                <%--显示一级菜单 --%>
                <s:iterator value="#application.topPrivilegeList">
                    <s:if test="#session.user.hasPrivilegeByName(name)"><!-- ognl表达式中调用方法 -->
                        <li class="level1">
                            <div onClick="menuClick(this);" class="level1Style">
                                <img src="style/images/MenuIcon/${id}.gif" class="Icon" />
                                ${name}
                            </div>
                            <ul style="" class="MenuLevel2" id="aa">
                                <%-- 显示二级菜单 --%>
                                <s:iterator value="children">
                                    <s:if test="#session.user.hasPrivilegeByName(name)">
                                        <li class="level2">
                                            <div class="level2Style">
                                                <img src="style/images/MenuIcon/menu_arrow_single.gif" />
                                                <a target="right" href="${pageContext.request.contextPath }${url}.action"> ${name}</a>
                                            </div>
                                        </li>
                                    </s:if>
                                </s:iterator>
                            </ul>
                        </li>
                    </s:if>
                </s:iterator>
            </ul>
        </div>
    </body>
</html>

User.java中增加

 

/**
     * 判定本用户是否有指定名称的权限
     * @param name
     * @return
     */
    public boolean hasPrivilegeByName(String name) {
        //超级管理员有所有的权限
        if(ifAdmin()) {
            return true;
            
        }
        //普通用户要判断是否含有这个权限
        for(Role role : roles) {
            for(Privilege priv : role.getPrivileges()) {
                if(priv.getName().equals(name)) {
                    return true;
                }
            }
        }
        return false;
    } 
    
    /**
     * 判断本用户是否是超级管理员
     */
    public boolean ifAdmin() {
        return "admin".equals(loginName);
    }

权限模块_使用权限_实现主页面的效果_显示左侧菜单&只显示有权限的菜单项

标签:mil   dao   single   doctype   view   nal   int   fun   nsa   

原文地址:http://www.cnblogs.com/justdoitba/p/7820353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!