项目一众筹网03_3_管理员维护_新增_保证每个用户的账号唯一_唯一约束_怎么得知原数据里面有没有重复的_MD5加密_生成创建时间_异常类处理

Posted 平凡加班狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目一众筹网03_3_管理员维护_新增_保证每个用户的账号唯一_唯一约束_怎么得知原数据里面有没有重复的_MD5加密_生成创建时间_异常类处理相关的知识,希望对你有一定的参考价值。

系列文章目录

前言

上一篇笔记里面
1、我们删除的时候其实还应该做删除确认,但是目前没做,这个要记一下
2、还有就是自己不能删除自己,如果管理员登录后在管理员管理里面自己删除了自己,这就尴尬了
细节是很多的,甚至可以说是永无止境,暂时可以不管,后面再慢慢优化
注意一定是拿到session后对比id而不是对比名字
3、还有细节,就是管理员删除不要做物理删除,我们做逻辑删除
生产环境下,绝大多数情况我们都是逻辑删除,而不是真的删除,因为数据真的删了就找不回来了
细节,可以说是永无止境,后面慢慢再优化,只要我们会这个技术了,了解清楚项目结构了,后面只是时间问题

10-管理员维护-新增-目标和思路

首先要确定一个,我们点击新增按钮的时候,需不需要带数据,也就是带参数过来

实际上是不需要的

添加的时候,我们在数据库里面做了账号唯一约束的话
java代码里面做不做检查账号是否重复都可以
java代码里面要是也做了唯一性检查的话,就是双重保护,更加保险
还有一个需要考虑的地方就是新增的时候,用户的密码,用户输入的是明文,但是我们保存到数据库的时候,应该就是秘文了

11-管理员维护-新增-前往表单页面

自己先探索一下


去找前端页面


我们都可以做一个
我们这里就做一个在新建的时候就需要用户设置密码的吧
我们新加一个密码输入框就行了,也不难
简单做一下


直接这么跳转行吗

改成a标签这个是没有任何问题的
但是这个跳转应该也要改一下,因为这样的话,是直接访问不了的,能直接访问的只有webapp下的页面


因为除了webapp下的jsp等资源是可以直接访问的,其它的都被保护起来了,可以这么理解
所以我们需要后台帮我们,要么就是写一个控制器跳转,要么就是写一个view-controller,这样就少写一个控制器
但是单纯页面跳转,没有参数的我们都可以用view-controller来实现



跳转就成了
下面把新增页面完善即可,跟以前一样,把前端代码我们需要的部分拷贝过来,该改的地方改一改,这里就不再赘述了


复制一下代码粘贴进去即可





然后就可以写后台代码了,后台代码很简单,暂时我们先随便写一些,在里就真的不赘述了

后台逆向工程基本都帮我们写好了,没啥好说的,直接三层那样简单的用就行
代码写好之后,测试一下看看
需要注意,前端链接的时候不能加参数了,因为我们的参数是动态用户输入的
后端直接获取前端的name属性就可以获取到了

另外需要注意的是,我们获取name属性,在后台是怎么去获取的,这个要非常清晰
否则根本就没入门
用什么注解,什么注解都行吗,显然不是

新增成功之后返回去哪里,这也是一个问题,
我们现在这么写对吗


显然不合理,我们改一下


经过测试,很完美,所以其实我们单独也是能搞定都,前提是有哪些基础知识和思路
总而言之就是思路和编码能力缺一不可

下面全部的内容,我们重头开始,这一节看看老师是怎么讲解的,这个新增功能,老师细节方面肯定会考虑得更加全面,值得我们学习

老师的讲解

设置唯一约束


因为我们要保证每个管理员(其实不止是管理员所有的用户都应该账号唯一)用户的账号唯一
所以我们最保险的方式是数据库里面设置唯一约束



复制

然后执行
其实也可以不这么弄,直接用powerDesiger也可以
下面我们试试
https://blog.csdn.net/yh88356656/article/details/52181113/


alter table t_admin
   add unique AK_Key_2 (login_acct);


这个很简单,我们把数据里面已经重复的账号删掉
如果是navicate里面就这样添加约束

怎么得知原数据里面有没有重复的账号

两种办法,一种是
SELECT count(login_acct),login_acct FROM t_admingroup by login_acct




否则会报错


其它的老师讲的跟我们自己摸索写的是一致的
我们这里不赘述了,几乎是一模一样的
我们就记录一下注意点就行了

12–管理员维护-新增-执行保存——巨简洁写法

这种写法就比我之前的写法简洁一万倍


新增的时候成功了或者失败了能够给出提示最好

执行保存之前密码要MD5加密

这个倒是我漏掉的,确实要执行MD5加密,这是必须要做的

生成创建时间

新增完成之后,怎么让用户第一时间看到

要么是进行一下倒叙 排序

要么是直接显示最后一页,我们更推荐这种写法,用户体验最好,也不用改sql语句了

注意,这里不要带关键词参数,就带一个最大页码参数就行了,
因为假设你原来的搜索关键词是王,后来你新增的没有王,
那么这个时候就出问题了,页面显示不出你新增的最新的数据

13-管理员维护-新增-处理唯一约束异常


我们在数据库设置了账号的唯一性约束之后,此时如果新增一个已经存在的账号就会报这个错
但是我们觉得这这样有点吓人了
能不能更友好一些?
应该给个提示,说你账号重复了

这里选哪个呢,实际上导入的包应该是哪个呢

注意,日志,导入的应该是slf4j


注意:info的打印级别实际上是高于debug的
这样会有什么问题呢?
不会报异常了,异常发生了但是被掩盖住了 ,程序不会崩了,我们可以看日志,看出问题所在=


所以我们得复制一下这个类,,处理一下这个类的异常

异常类处理

输入快捷键 Ctrl+shift+R 如下 找到这个类 CrowdExceptionResolver

上面这个方法写了,还要定位一个自定义类,所以我们先把这个类新建出来
再由于
我们可能违反唯一约束的也不一定每次都是账号重复了
我们如果每次都告诉客户是你的账号重复了,恐怕不太好
怎么才能更详细的更具体,更准确的描述这个问题呢
只有在保存admin的时候,出现了这个异常才是账号重复
所以我们单独新建一个自定义异常来处理这个问题,的名字可以这样写


自动生成父类的一些构造器和方法,就可以直接用了



注意类名这些要复制,手写很容易错

注意更新的时候也有可能有这个账号重复的问题,所以到时候更新的时候我们也可以抛出这个异常


然后测试跑一下就行了
而这个时候,这个前端的域对象,也能够正常报出异常信息了

出现这个就说明成功了

14-管理员维护-更新-目标和思路(下一篇)

15-管理员维护-更新-前往更新的表单页面
16-管理员维护-更新-执行更新
17-管理员维护-更新-小结
18-RBAC模型-概述
19-RBAC模型-多对多在数据库的表示
20-RBAC模型-RBAC0~3
21-RBAC模型-RBAC模型的数据库表示
22-Ajax工作模式探讨-异步
23-Ajax工作模式探讨-同步
24-Ajax工作模型探讨-总结

以上是关于项目一众筹网03_3_管理员维护_新增_保证每个用户的账号唯一_唯一约束_怎么得知原数据里面有没有重复的_MD5加密_生成创建时间_异常类处理的主要内容,如果未能解决你的问题,请参考以下文章

项目一众筹网03_5_工作模式探讨同步和异步探讨

项目一众筹网04_2_角色维护新增和更新[ajax异步开发模式]_bootStrap模态框的使用_后端保存的2种方式_

项目一众筹网03_1_管理员维护_页码导航条bug解决_关键词查询_主页搜索框模糊查询_模糊查询怎么传参页码导航条优化

项目一众筹网03_0_管理员维护(分页 和 管理员的增删改查)——分页导航条使用bootstrap自带的页码插件实现动态页码(回调函数js怎么跳转页面)

项目一众筹网03_5_RBAC(权限管理)模型-概述

项目一众筹网03_2_管理员维护_单条数据删除_获取单条数据的id__前端传参给后端的两种方式_a标签才有href属性_全面了解各种转发和重定向方式