SSM框架实现后台管理系统权限管理(用户、菜单、角色)

后台管理系统开发功能模块:用户登录、权限管理(用户管理、菜单管理、角色管理)技术应用:SSM框架+Mysql5.7+jsp+前端layui和EasyUI框架项目工具:Maven+tomcat9.0+jdk1.8+GIT开发工具:IDEA测试环境:window7+搜狗浏览器10.0 一、数据库表结构设计基础权限管理需要五张表:菜单、用户、角色、角色权限、用户角色创建数据库CREATE DATABASE IF NOT EXISTS exam;1、菜单表menu描述字
摘要由CSDN通过智能技术生成

后台管理系统开发

功能模块:用户登录、权限管理(用户管理、菜单管理、角色管理)

技术应用:SSM框架+Mysql5.7+jsp+前端layui和EasyUI框架

项目工具:Maven+tomcat9.0+jdk1.8+GIT

开发工具:IDEA

测试环境:window7+搜狗浏览器10.0

 

一、数据库表结构设计

基础权限管理需要五张表:菜单、用户、角色、角色权限、用户角色

创建数据库

CREATE DATABASE IF NOT EXISTS exam;
1、菜单表menu
描述 字段 类型 约束
菜单id id int 主键自增
菜单名 name varchar 不能为空
链接页面 url varchar
父菜单id parent_id int
菜单排序 sort int
icon varchar
perms varchar
菜单类型 type smallint

建表sql:

CREATE TABLE menu (
	id int PRIMARY KEY AUTO_INCREMENT,
	name varchar(50) NOT NULL,
    parent_id int,
	url varchar(500),
	icon varchar(30),
	perms varchar(100),
	type smallint(6),
    sort int
);

插入数据:

insert into menu(name,icon,type,sort) value("权限管理","fa fa-bug",0,1);
insert into menu(name,parent_id,url,icon,perms,type,sort) value("菜单管理",2,"/sys/menu.html","fa fa-th-list","svs:menu:list",1,1000);
insert into menu(name,parent_id,url,icon,perms,type,sort) value("角色管理",2,"/sys/role.html","fa fa-key","svs:role:list",1,1000);
insert into menu(name,parent_id,url,icon,perms,type,sort) value("用户管理",2,"/sys/user.html","fa fa-user","svs:user:list",1,1000);

insert into menu(name,parent_id,perms,type,sort) value("添加",5,"sys:user:add",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("修改",5,"sys:user:update",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("删除",5,"sys:user:delete",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("授权",5,"sys:user:assign",2,1000);

insert into menu(name,parent_id,perms,type,sort) value("添加",3,"sys:menu:add",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("修改",3,"sys:menu:update",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("删除",3,"sys:menu:delete",2,1000);

insert into menu(name,parent_id,perms,type,sort) value("添加",4,"sys:role:add",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("修改",4,"sys:role:update",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("删除",4,"sys:role:delete",2,1000);
insert into menu(name,parent_id,perms,type,sort) value("授权",4,"sys:role:assign",2,1000);

2、用户表user
描述 字段 类型 约束
用户id id int 主键自增
用户名 account varchar 唯一、不能为空
用户密码 password varchar
昵称 nickname varchar
动态盐(用户名md5) salt varchar
用户状态 status int 为1正常,为0表示停用

建表sql:

CREATE TABLE user (
	id int PRIMARY KEY AUTO_INCREMENT,
	account varchar(50) NOT NULL UNIQUE,
	password varchar(50),
	nickname varchar(50),
	salt varchar(50),
    STATUS int DEFAULT '1'
);

插入数据:

insert into user(account, password, nickname)
VALUES ("a000001", "123456", "瞪谁谁怀孕"),
       ("a000002", "123456", "骑猪上高速"),
       ("a000003", "123456", "朕要去幼儿园深造了"),
       ("a000004", "123456", "帅到拖网速"),
       ("a000005", "123456", "遇蛇撑伞装许仙"),
       ("a000006", "123456", "谈情不如逗狗"),
       ("a000007", "123456", "地球是哥捏圆的"),
       ("a000008", "123456", "不贱不散"),
       ("a000009", "123456", "跳进海里躲雨"),
       ("a000010", "123456", "此用户下落不明")
       ("a000011", "123456", "软妹轰炸机"),
       ("a000012", "123456", "怡红院掌柜"),
       ("a000013", "123456", "被丢弃的小盆友"),
       ("a000014", "123456", "近猪者吃"),
       ("a000015", "123456", "跪是种美德"),
       ("a000016", "123456", "老衲逛青楼"),
       ("a000017", "123456", "武功再高也怕菜刀"),
       ("a000018", "123456", "镜子你又胖了"),
       ("a000019", "123456", "骑猪总裁"),
       ("a000020", "123456", "抢我辣条还想跑"),
       ("a000021", "123456", "骗子被骗子骗了"),
       ("a000022", "123456", "农夫三拳"),
       ("a000023", "123456", "夜以深,适宜私奔"),
       ("a000024", "123456", "卖女孩的小火柴"),
       ("a000025", "123456", "唐伯虎点蚊香"),
       ("a000026", "123456", "贱男春"),
       ("a000027", "123456", "老鼠上了猫"),
       ("a000028", "123456", "穷人的孩子早出家"),
       ("a000029", "123456", "车到山前是死路"),
       ("a000030", "123456", "我在马路边丢了一分钱"),
       ("a000031", "123456", "卖身葬楼主"),
       ("a000032", "123456", "人贱人爱"),
       ("a000033", "123456", "看野花一朵朵");
3、角色表role
描述 字段 类型 约束
角色id id int 主键自增
角色名 name varchar
角色备注 remark varchar
角色状态 status int

建表sql:

CREATE TABLE role (
	id int PRIMARY KEY AUTO_INCREMENT,
	name varchar(50) NOT NULL,
	remark varchar(50) NOT NULL,
	status int NOT NULL
);

插入数据:

INSERT INTO role (NAME, REMARK, STATUS) VALUES ('admin', '超级管理员', 1),
('test1', 'remark', 1),
('aa3', '3333', 0),
('asd', 'sadsa', 0),
('sa', 'asd', 0);
4、角色权限表role_menu
描述 字段 类型 约束
角色id role_id int 不能为空
菜单名 menu_id int 不能为空

建表sql:

CREATE TABLE role_menu (
	role_id int NOT NULL,
	menu_id int NOT NULL,
	CONSTRAINT `PRIMARY` PRIMARY KEY (role_id, menu_id)
);

插入数据:

INSERT INTO role_menu (role_id, menu_id) 
VALUES(1, 2),(1, 3),(1, 4),(1, 5),(1, 6),(1, 7),(1, 8),(1, 9),(1, 10),(1, 11),(1, 12),(1, 13),(1, 14),(1, 15);
INSERT INTO role_menu (role_id, menu_id) 
VALUES(2, 4),(2, 12),(2, 13),(2, 14),(2, 15);
5、用户角色表user_role
描述 字段 类型 约束
用户id user_id int 不能为空
角色id role_id int 不能为空

建表sql:

CREATE TABLE user_role (
	user_id int NOT NULL,
	role_id int NOT NULL,
	CONSTRAINT `PRIMARY` PRIMARY KEY (user_id, role_id)
);

插入数据:

INSERT INTO user_role (USER_ID, ROLE_ID) VALUES (1, 1),(2, 2);
二、项目准备
1、创建maven项目

建包

主包:com.booy.ssm.exam

子包:实体类包pojo、dao包、service包、controller包、utils包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h63d5ung-1592834137816)(\img\1.jpg)]

2、创建实体类

User类

package com.booy.ssm.exam.pojo;

import lombok.Data;

@Data
public class User {
   
    private Integer id;
    private String account;
    private String password;
    private String nickname;
    private Integer status;
}

Menu类:

package com.booy.ssm.exam.pojo;

import lombok.Data;

@Data
public class Menu {
   
    private Integer id;
    private String name;//菜单名
    private String url;
    private Integer parentId;//父id
    private Integer sort;//排序
}
3、添加依赖

在pom.xml添加项目所需要用到的依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ssmdemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <spring.version>5.1.3.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.29</version>
        </dependency>
        <!--日志包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!--spring数据库-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--aop-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring核心包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring-mybatis整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--spring相关包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--实体类注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.22</version>
        </dependency>
        <!--分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <!--配置资源文件扫描,否则Mapper-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
三、登录功能简单实现
1、dao层

创建UserDAO接口:

package com.booy.ssm.exam.dao;

import com.booy.ssm.exam.pojo.User;

public interface UserDAO {
   
    User getUserByAccount(String account);
}

创建UserMapper.xml映射sql查询:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.booy.ssm.exam.dao.UserDAO">
    <!--<![CDATA[你的注释]]>-->
    <select id="getUserByAccount" resultType="User" parameterType="String">
        select id, account, password,status
        from user
        where account=#{
   account}
    </select>
</mapper>
2、service层

创建UserService接口:

package com.booy.ssm.exam.service;

import com.booy.ssm.exam.pojo.User;

public interface UserService {
   
    //用户登录
    User dologin(String account,String password);
}

UserService接口实现类:

package com.booy.ssm.exam.service.impl;

import com.booy.ssm.exam.dao.UserDAO;
import com.booy.ssm.exam.pojo.User;
import com.booy.ssm.exam.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
   
    @Autowired
    private UserDAO userDAO;

    @Override
    public User dologin(String account, String password) {
   
        User user = userDAO.getUserByAccount(account);
        if(user==null || !user.getPassword().equals(password)|| user.getStatus().equals(ExamConstants.USER_STATUS_DELETE)){
   
            return null;//账号或密码错误
        }
        return user;
    }
}
3、controller层

创建SystemController

package com.booy.ssm.exam.controller;

import com.booy.ssm.exam.pojo.User;
import com.booy.ssm.exam.service.UserService;
import com.booy.ssm.exam.utils.ExamConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;

@Controller
public class SystemController {
   
    @Autowired
    UserService userService;

    @RequestMapping("login.html")
    public String login(){
   
        return "login";
    }
    
    @RequestMapping("dologin.html")
    public String dologin(String account, String password, Model model, HttpSession session){
   
        User user = userService.dologin(account, password);
        if(user==null){
   
            model.addAttribute("message","用户名或密码错误!");
            return "login";
        }
        model.addAttribute("message","登录成功!");
        session.setAttribute(ExamConstants.SESSION_USER,user.getAccount());
        return "redirect:index.html";
    }
}
4、utils工具类
package com.booy.ssm.exam.utils;

public interface ExamConstants {
   
    String SESSION_USER="SESSION_USER";
    int USER_STATUS_DELETE=0;
}
5、引入配置文件

1)、jdbc配置文件jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/exam?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

2)、日志文件log4j.properties

log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#begin
#for normal test, delete when online
log4j.logger.com.ibatis=DEBUG
1og4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
1og4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
1og4j.logger.java.sql.Connection=DEBUG
1og4j.logger.java.sql.Statement=DEBUG
1og4j.logger.java.sql.PreparedStatement=DEBUG
1og4j.1ogger.java.sq1.ResultSet=DEBUG

3)、spring配置文件spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--数据源管理-->
    <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username
  • 50
    点赞
  • 477
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值