用户管理系统(1)

news2025/7/5 16:00:00

1)用户管理项目:基本功能介绍

1)登录功能:只能是超级管理员管理员登录,普通用户无法进行登录

2)用户的列表页面:普通用户的列表页和超级管理员的列表页

3)条件查询:组合条件查询,不定规则的查询,指定名称,指定籍贯,指定邮箱来进行查询

4)分页功能:前端显示分页功能

5)添加用户:普通管理员不可以操作超级管理员(修改,删除),但是可以新增普通管理员

6)单条删除功能,多条删除功能(选中多条进行删除),不可以删除超级管理员

7)修改用户:不可以修改登录名字,登录名和用户名不一样的,不可以修改超级管理员的信息

8)单条删除用户,多条批量删除用户(用动态标签,判断里面是否有超级管理员,如果有超级管理员,是不能删除的)

2)设计数据库:

使用的技术:SpringBoot+Mybatis+SpringMVC+拦截器+统一数据格式的返回

用户表:

UserID 用户的唯一身份标识 int

姓名 Varchar(50)

性别 varchar(10)

年龄 int

籍贯 varchar(50)

QQ varchar(15)

邮箱 varchar(50)是否是超级管理员,int

登录名 varchar(50)-----不允许有中文的

密码   varchar(100)

用户创建时间 varchar(50)

数据库插入操作:
 

drop database if exists Java100;
create database if not Java100 character set utf8;
use Java100;
create table User(
userID int primary key auto_increment,
userName varchar(50) unique not null,
loginName varchar(60) unique not null,
passWord varchar(90) unique not null,
sex varchar(30) default "男",
address varchar(60),
qq varchar(60),
email varchar(40),
isAdmin int default 0,
createTime datetime default Now(),
updateTime datetime default Now()
);

引入依赖:

1)SpringBootDevTools

2)Lombok

3)SpringWeb

4)MyBatisFrameWork

5)MySQL Dirver

6)拦截器

3)配置配置文件:

#下面是配置数据库连接的基本信息
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Java100?characterEncoding=utf-8&useSSL=true
spring.datasource.password=12503487
#下面是配置数据库XML文件的保存路径
mybatis.mapper-locations=classpath: mapper/**.Mapper.xml
#配置MyBatis打印的SQL
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug


我们在配置文件里面指定了mapper的xml文件的路径,在我们的xml里面,我们通过namespace指定了被mapper修饰的接口的路径

4)对同一的异常进行处理,对于统一的对全局生效的文件,我们可以把它放在Configuration文件里面

/对统一的异常进行处理
@ControllerAdvice
public class ProcessException {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public HashMap<String,Object> Start(Exception e){
        //我们这一次返回的是JSON格式的数据
        HashMap<String,Object> hashMap=new HashMap<>();
        hashMap.put("status",200);
        hashMap.put("data","");
        hashMap.put("state",-1);
        hashMap.put("message",e.getMessage());
        return hashMap;
    }
}

5)返回原则:所有的接口必须有统一的数据格式返回

我们要想进行统一的数据格式的返回,方法有两种:

1)定义一个全局的返回对象,每一个接口返回的时候调用该对象来进行返回

2)Advice接口增强实现统一的数据封装

返回JSON格式的数据:
{
status:状态码
data:后端返回的数据
state:-1/1
message:是对status返回状态的一个对应声明,比如说登陆失败,用户名密码错误,用户名密码是空
}

6)配置拦截器

public class ProcessLogin implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //如果这个方法的返回值是true,那么表示当前用户已经登陆,那么直接可以访问目标方法
        //如果说这个方法的返回值是false,那么表示当前用户没有进行登录,那么会直接跳转到登陆界面
        HttpSession httpSession= request.getSession(false);
        if(httpSession==null||httpSession.equals("")||httpSession.getAttribute("user")==null||httpSession.getAttribute("user").equals("")){
           response.sendRedirect("login.html");
            return false;
        }
        return true;
    }
}
//把这个注册到Spring里面
@Configuration
class InsertSpringBoot implements WebMvcConfigurer{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new ProcessLogin())
                .addPathPatterns("/**")
                .excludePathPatterns("/css/**")
                .excludePathPatterns("/fonts/**")
                .excludePathPatterns("/images/**")
                .excludePathPatterns("/js/**")
                .excludePathPatterns("/css/**")
                .excludePathPatterns("/**/login.html");
    }
}

7)将所有的前端文件放在static目录下面

8)根据数据库的表创建实体类


@Data
public class User {
    private int userID;
    private String userName;
    private String loginName;
    private String passWord;
    private String sex;
    private String address;
    private String qq;
    private String email;
    private String isAdmin;
    private Timestamp createTime;
    private Timestamp updateTime;

}

 

除此之外,咱们还要向数据库中插入一条记录 

1.实现登录功能:我们要根据前端传递的用户名和密码来进行 

2.实现添加功能:有两个和后端交互的接口

1)获取到当前用户登陆权限的接口(是超级管理员还是普通管理员)(后面会做统一的登录拦截)

2)点击添加要实现添加功能

在咱们的添加功能里面,普通管理员是可以进行添加普通管理员的,是不可以添加超级管理员的,但是咱们的超级管理员啥都能添加;

根据用户的身份显示登陆界面:

3)在我们的前端按钮时有一个选项展示给咱们的超级管理员的,当执行添加操作的时候,超级管理员点击是还是不是,这部分的内容是一个div标签,所以说当用户进行登陆之后,加载我们的添加页面的时候,我们的前端要给后端发送一个Http请求,后端要根据HttpSession对象来获取User对象,后端返回User对象中的IsAdmin字段,然后前端再次拿到后端返回的参数,根据IsAdmin的值来决定是否显示这个div标签

4)咱们的前端直接使用Jquery("#adminDiv").show()方法来决定是否显示这部分内容,想要隐藏调用hidde()方法

进行插入操作:

1)在我们的前端直接获取到登陆名字,用户名,密码,确认密码,年龄,QQ,邮箱,判断他们是否为空,检测密码和确认密码是否一致

2)将这些参数传递到我们的后端,添加操作成功了,我们就返回一个1,失败我们就返回一个数字0

3)在这里面我们还是要注意,我们的有几个控件

1.比如说我们想要获取到性别这样的控件

<input id="man" type="radio" name="sex" value="男" checked="checked">男
<input id="women" type="radio" name="sex" value="女">女
当我们的单选框中的name属性一样的时候,我们才可以进行单选

该怎们进行实现呢? 

针对上面的控件:

jQuery("input[name=sex]:checked").val();
1)先通过name来进行获取到radio控件
2)checked拿到选中的控件
3)val()方法可以拿到性别信息是因为input里面有value属性

2.我们还要要拿到籍贯的控件:

<select name="address" id="address" class="form-control">
    <option value="北京">北京</option>
    <option value="上海">上海</option>
    <option value="广州">广州</option>
</select>
jQuery("#address").val
根据id来进行取值

 当我们的用户进行添加操作的时候,后端在继续进行插入的时候,如果前端请求的参数User对象,当User对象的IdAdmin是1的时候,表明当前用户是管理员,他要进行添加管理员操作,我们要验证当前登录的用户是否是管理员!!!!我们就通过HttpSession中的Session对象来进行判断:

实现修改操作:

当前我们的项目是不能够修改超级管理员的,况且我们的登陆名字是不可以进行修改的

1)从我们的url中获取到UserID(前端)

2)展示信息(展示用户信息)

3)用户进行编辑信息再去提交信息

涉及到的安全问题:

再进行展示页面的时候先要获得用户登录权限的校验,还有查看权限的校验,普通管理员是不能进行查看超级管理员的信息(后端),普通用户是不能进行编辑超级管理员的信息的

在我们进行编辑和提交信息的时候也是要做上面两个步骤的校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

相控阵天线(二):非规则线阵(稀布阵列、稀疏阵列、平方率分布阵列)

概述 非规则线阵主要包括以下情况&#xff1a; 1. 不均匀间距阵列&#xff1a; a&#xff09;不均匀间距递变阵列&#xff1a;单元间距按照一定的系数递增&#xff1b; b&#xff09;稀布阵列&#xff1a;阵元间隔不是固定的&#xff0c;没有规律&#xff1b; c&#xff09;稀…

广州蓝景分享—「JavaScript」this关键字的五个重要事项

首先this 关键字是 JavaScript 中最令人困惑的部分之一&#xff0c;今天通过介绍有关它的五个重要事项来阐明其目的和用法。 1、它允许访问同一对象上的其他属性 在 JavaScript 中&#xff0c;函数可以是独立的单元&#xff0c;但它们也可以用作对象的值。 考虑下一个对象。 …

SpringFramework:循环依赖与三级缓存

循环依赖与三级缓存 文章目录循环依赖与三级缓存一、Spring 中的循环依赖问题1. Spring 中的循环依赖概述2. Spring 中的循环依赖的 5 种场景二、Spring 三级缓存1. spring 创建 bean 的流程2. 场景一&#xff1a;单例的 setter 注入3. 三级缓存4. 关于二级缓存三、循环依赖的其…

ELFK——ELK结合filebeat日志分析系统(2)

目录 一、filebeat 二、ELFK 1.原理简介 2.在ELK基础上部署filebeat ​​​​​​ELK 企业级日志分析系统&#xff08;1&#xff09;_Evens7xxX的博客-CSDN博客 紧接上一期&#xff0c;这期会介绍ELK结合filebeat的部署和使用 一、filebeat Filebeat&#xff0c;轻量级的…

Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果

Q1. 如何使题目、摘要、关键词为通栏&#xff0c;而下面开始的正文为双栏&#xff1f; 将光标移动到最后一个关键词后 布局—分隔符—分节符&#xff08;连续&#xff09; 将光标移动到正文第一个大标题前 布局—页面设置—文档网格—文字排列—栏数设置为 2&#xff0c;操作…

Python如何爬取免费爬虫ip

做过大数据抓取的程序员应该都知道&#xff0c;正常市面上的爬虫ip只分为两种&#xff0c;一种是API提取式的&#xff0c;还有一种是账密形式隧道模式的。往往因为高昂费用而止步。对于初学者觉得没有必要&#xff0c;我们知道每个卖爬虫ip的网站有的提供了免费IP&#xff0c;可…

基于CentOS使用宝塔+Nginx搭建个人小H站

本文目录前言第一步 - 购置服务器第二步 - 连接服务器第三步 - 安装宝塔第四步 - 部署网站总结前言 最近心血来潮&#xff0c;恰逢帅地老哥在公众号搞活动&#xff0c;白嫖了一台服务器&#xff0c;于是打算搭一个小网站玩玩。其实早有此念头&#xff0c;只是因为懒(●ˇ∀ˇ●…

项目实战——实现注册和登录模块

目录 一、整体框架 二、实现JwtToken验证 1、添加依赖 2、编写、修改相关类 三、实现后端 API 四、实现前端的登录&#xff0c;注册界面 ps&#xff1a;本篇文章篇幅较长&#xff0c;且难度有所提升&#xff0c;希望大家耐心看完&#xff0c;种一棵树最好的时间是十年前&…

ヾ(⌐ ■_■)— HTML-CSS常用属性

目 录 1.文字的设置 (1)文字的基本属性&#xff08;font&#xff09; (2)文字的排版以及添加文字的修饰 2.颜色的设置 3.背景的设置&#xff08;background&#xff09; 4.边框的相关设置 (1)边框样式的设置&#xff08;border-style&#xff09; (2)边框宽度的设置…

操作系统4小时速成:操作系统发展和分类,运行环境:运行机制和内核,用户态非特权,核心态特权,中断技术,访管指令

操作系统4小时速成&#xff1a;操作系统发展和分类&#xff0c;运行环境&#xff1a;运行机制和内核&#xff0c;用户态非特权&#xff0c;核心态特权&#xff0c;中断技术&#xff0c;访管指令 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂…

有趣的 Go HttpClient 超时机制

hello&#xff0c;大家好呀&#xff0c;我是既写 Java 又写 Go 的小楼&#xff0c;在写 Go 的过程中经常对比这两种语言的特性&#xff0c;踩了不少坑&#xff0c;也发现了不少有意思的地方&#xff0c;今天就来聊聊 Go 自带的 HttpClient 的超时机制。 Java HttpClient 超时底…

Ubuntu22.04中root用户下依然权限不够,执行不了可执行文件

文章目录先看现象解决方法什么情况下会遇到这样的错误先看现象 provider是一个C语言编译得到的可执行文件。 开始&#xff0c;我直接运行它&#xff0c;告诉我权限不够然后我加上sudo运行&#xff0c;告诉我找不到命令最后我进入root用户运行&#xff0c;竟然还告诉我权限不够…

PraNet: Parallel Reverse Attention Networkfor Polyp Segmentation

Tittle:用于息肉分割的并行反向注意力网络 摘要 准确的息肉分割主要面临着两个难点&#xff1a;1&#xff09;相同类型的息肉有不同的大小&#xff0c;颜色和纹理。2&#xff09;息肉与周围粘膜的边界模糊不清晰。 为了解决这些挑战本文提出了一种并行反向注意网络ParNet。具…

10、MySQL——子查询

目录 一、子查询 1、子查询出现的位置 2、子查询结果集的形式 二、实例演示 1、查询工资高于JONES的员工 1.1 分析 1.2 代码 2、查询与SCOTT同一部门的员工 2.1 分析 2.2 代码 3、工资高于30号部门所有人的员工信息 3.1 分析 3.2 代码 4、查询工作和工资…

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基 羟基&#xff08;oxhydryl&#xff09;是一种常见的极性基团&#xff0c;化学式为-OH。羟基与水有某些相似的性质&#xff0c;羟基是典型的极性基团&#xff0c;与水可形成氢键&#xff0c;在无机化合物水溶液中以…

钙尔奇30周年以行动,力挺中国骨骼健康发展

启动行动力赋能新旅程 近日&#xff0c;2022年度西普会于中国海南博鳌盛大举行。以“构筑患者价值同心圆——二元发展驱动健康产业新增长”为主题&#xff0c;本届西普会的会议内容和参会主体全面升维&#xff0c;从全球视野到中国特色聚合优质资源、拓宽产业边界&#xff0c;…

vue项目中实际构建echarts拓扑关系图业务

vue项目中实际构建echarts拓扑关系图业务前言一、关系拓扑是什么&#xff1f;二、需求梳理三、封装关系图组件1.父组件引用2.测试数据引入3.封装关系子组件4.关系组件完整代码总结前言 由于现在echarts的利用率增强&#xff0c;需要用到拓扑图的设计&#xff0c;如果单纯针对e…

Ubuntu虚拟机安装

文章目录VMware添加虚拟机等待开机&#xff08;需要一些时间安装系统&#xff09;检查网络环境设置 Ubuntu 中文支持一些基础设置VMware添加虚拟机 文件——>新建虚拟机 下一步&#xff1a;安装程序光盘映像文件&#xff08;iso&#xff09; 设置主机名&#xff0c;用户名及…

reportportal 集成 robotframework 自动化执行及结果可视化

最近领导想了个需求&#xff0c;想把目前组内在linux平台上执行的自动化脚本搞成可视化&#xff0c;如果是web站点相关日志可视化倒是简单了&#xff0c;ELK就是不错的选择&#xff0c;大部分可视化项目这种的&#xff0c;可以做的开起来很炫。 我们这边是自己写的脚本&#x…

机器学习西瓜书-1-2章

学习目标&#xff1a; 概览机器学习西瓜书 1、2章 学习内容&#xff1a; 第一章 绪论 1.1 基本术语 1.2 假设空间 1.3 归纳偏好 1.4 发展历程 第二章 模型评估与选择 2.1 经验误差与过拟合 2.2 评估方法 2.3 性能度量 学习时间&#xff1a; 两天 学习产出&#xff1a; 第…