企业级应用系统(J2EE)开发技术我爱编程系统架构

用户、角色、权限管理系统(一)

2018-05-27  本文已影响815人  根艮哏艮根

本文版权归作者和简书共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

最近一直在练习java后台开发,感觉后台开发需要的知识点有点杂,比如你的会java开发,数据库开发(SQL语句的编写),JSP页面的编写(HTML),JS等等,但是也不是太难,只要认真去学习,相信聪明的你们都会学会的。
在学习的过程中我是在做每个小项目中去具体的去应用,我做的练习是java里面经典的《用户,角色,权限管理系统》。

用到的知识/框架

这个小项目采用的是JFinal框架,,前台框架使用的是layui前台框架,数据库采用的是MySql,前后台交互使用jQuery。

JFinal框架:http://www.jfinal.com/doc/2-3
layui框架:http://www.layui.com/
MySQL教程:http://www.runoob.com/mysql/mysql-tutorial.html
jQuery教程:http://www.w3school.com.cn/jquery/index.asp
JSTL教程:http://www.runoob.com/jsp/jsp-jstl.html
EL表达式教程:http://www.runoob.com/jsp/jsp-expression-language.html

数据库设计了五张表:


数据库.png

下面先奉上系统内的截图:

首页.png
用户管理界面.png
角色管理界面.png
菜单管理界面.png
分配角色.png
分配菜单.png

部分代码

JFinal基本配置

/**
 * 
 */
package com.gengen.manager.config;

import java.io.File;

import com.gengen.manager.controller.LoginController;
import com.gengen.manager.controller.MainController;
import com.gengen.manager.controller.MenuController;
import com.gengen.manager.controller.RoleController;
import com.gengen.manager.controller.UserController;
import com.gengen.manager.interceptor.LoginInterceptor;
import com.gengen.manager.model.User;
import com.gengen.manager.model._MappingKit;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;

/**
 * @ClassName: MyConfig
 * @author Liu_xg
 * @date 2018年5月4日
 * @Description: TODO
 */
public class MyConfig extends JFinalConfig {

    /**
     * 通用配置
     */
    @Override
    public void configConstant(Constants me) {
        // TODO Auto-generated method stub
        me.setDevMode(true);
        me.setEncoding("utf-8");
        me.setViewType(ViewType.JSP);
        

        me.setError404View("/WEB-INF/common/error404.jsp");
        me.setError500View("");
        // 指定json工具jar包为fastjson
        me.setJsonFactory(new FastJsonFactory());
        // 上传图片的路径
        me.setBaseUploadPath(PathKit.getWebRootPath()+File.separator+"upload"+File.separator);
    }

    /**
     * 配置路由
     * 
     * @param me
     */
    @Override
    public void configRoute(Routes me) {

        // 配置拦截器
        me.addInterceptor(new LoginInterceptor());

        me.add("/", LoginController.class, "/WEB-INF/views/login");
        me.add("/main", MainController.class, "/WEB-INF/views/main");
        me.add("/menu", MenuController.class, "/WEB-INF/views/menu");
        me.add("/user", UserController.class, "/WEB-INF/views/user");
        me.add("/role", RoleController.class, "/WEB-INF/views/role");

    }

    @Override
    public void configEngine(Engine me) {
        // TODO Auto-generated method stub

    }

    /**
     * 配置插件
     */
    @Override
    public void configPlugin(Plugins me) {

        // 配置D3p0数据库连接池
        DruidPlugin plugin = createDruidPlugin();
        me.add(plugin);

        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(plugin);
        _MappingKit.mapping(arp);
        me.add(arp);
        arp.addMapping("t_user", User.class);
    }

    @Override
    public void configInterceptor(Interceptors me) {
        // TODO Auto-generated method stub

    }

    @Override
    public void configHandler(Handlers me) {
        // TODO Auto-generated method stub

    }

    /**
     * 连接数据库
     * 
     * @return
     */
    public static DruidPlugin createDruidPlugin() {
        PropKit.use("jdbc.properties");
        return new DruidPlugin(PropKit.get("db.url"), PropKit.get("db.username"), PropKit.get("db.password"));
    }

}

通过登陆用户的ID来查询此用户对应角色所分配的权限信息,用于在登陆后菜单的展示.

首先根据登陆用户id来查询此用户对应的一级目录信息,然后在根据一级目录id和用户id来查询此用户在该一级目录下的二级目录信息。

Controller层代码

/**
     * 展示权限管理系统后台页
     */
    @SuppressWarnings("unchecked")
    public void mainMenu() {
        User user=getSessionAttr("user");
        menus = (List<Map<String, Object>>) mainService.mainMenuByUserIdFromMain(user.getId());
        if (menus != null) {
            if(user.getImagePath()==null){
                setAttr("iconName","/upload/defult.jpg");
            }else{
                setAttr("iconName",user.getImagePath());
            }
            setAttr("user",user);
            setAttr("menus", menus);
            // 显示欢迎界面
            setAttr("url", "/main/welcome");
            // 将数据库中查询到的main路径动态添加到布局中
            renderJsp("mainMenu.jsp");
        }

    }

Service层代码

/**
     * 菜单展示(通过用户id来查询菜单、权限)
     * 
     * @param userId
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<?> mainMenuByUserIdFromMain(int userId) {

        menus = new ArrayList<>();
        // 查到父item的信息
        menusParent = (List<Menu>) menuDao.queryMenuParent(-1);
        if (menusParent != null) {
            for (int i = 0; i < menusParent.size(); i++) {
                // 查到该父item关联的子item信息
                menusChild = (List<Menu>) menuDao.queryMenuchildByUserId(menusParent.get(i).getId(), userId);
                if (menusChild.size()>0) {
                    maps = new HashMap<>();
                    maps.put("menusParent", menusParent.get(i));
                    maps.put("menusChild", menusChild);
                    menus.add(maps);
                } 
            }
        }
        return menus;
    }

Dao层代码

/**
     * 查询父菜单item的相关信息
     */
    public List<?> queryMenuParent(int menuId) {
        String sql = "select id,menu_name,parent_id from t_menu where  statue=1 and parent_id=0 ";
        prarms = new ArrayList<Object>();
        try {
            if (menuId > 0) {
                sql += " and id=?";
                prarms.add(menuId);
            }
            List<?> menus = dao.find(sql, prarms.toArray());
            return menus;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 查询子菜单item(根据根目录id和用户id)
     */
    public List<?> queryMenuchildByUserId(int parent_id, int user_id) {
        String sql = "select m.menu_name,m.parent_id,m.child_path,m.id " + "from t_menu m,t_user_role u,t_role_menu r "
                + "where m.statue=1 and u.role_id=r.role_id and r.menu_id=m.id ";
        prarms = new ArrayList<Object>();
        if (parent_id > 0) {
            sql += " and m.parent_id=?";
            prarms.add(parent_id);
        }
        if (user_id > 0) {

            sql += " and u.user_id=?";
            prarms.add(user_id);
        }
        try {
            List<?> menus = dao.find(sql, prarms.toArray());
            return menus;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

JSP页面代码

 <div class="layui-side layui-bg-black" lay-filter="demo">
    <div class="layui-side-scroll">
      <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
      <ul class="layui-nav layui-nav-tree"  lay-filter="test">
        <c:forEach  items="${menus }" var ="menus" step="1" varStatus="i">
            <li class="layui-nav-item">
                 <a class="" href="javascript:;">${menus.menusParent.menu_name }</a>
                  <dl class="layui-nav-child">
                       <c:forEach items="${menus.menusChild }" var ="menusChild" step="1">
                            <dd><a href="javascript:void(0)" data-id="${menusChild.id }" 
                            data-url="${menusChild.child_path }"  
                            data-title="${menusChild.menu_name }" class="site-demo-active">
                            <%-- onclick="setContent('${menusChild.child_path }');" --%>
                                ${menusChild.menu_name }
                            </a></dd>
                       </c:forEach>
                  </dl>
            </li>
        </c:forEach>
      </ul>
    </div>
  </div>

请接下篇:用户、角色、权限管理系统(二)

上一篇 下一篇

猜你喜欢

热点阅读