欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

个人在线学习网站(第七章用户管理与单点登录)

时间:2023-06-16

service中根据用户名查询

查询实体类UserQueryReq

保存实体类UserSaveReq加了一个长度校验,正则判断

用户名重复校验与自定义异常

新增用户时,增加用户名重复校验
在service中添加根据loginName查询的方法
 

public User selectByLoginName(String LoginName) { UserExample userExample = new UserExample(); UserExample.Criteria criteria = userExample.createCriteria(); criteria.andLoginNameEqualTo(LoginName); List userList = userMapper.selectByExample(userExample); if (CollectionUtils.isEmpty(userList)) { return null; } else { return userList.get(0); } }

在新增插入之前进行一次判断,如果查出来用户名为空,可以进行新增

校验重复时,抛出自定义异常
针对Exception应该打印整个堆栈信息,方便查问题

修改时,用户名不能修改  :disabled=“user.id”
在前端:disabled修改  如果user.id有值就disables,如果user.id没值,就不disabled

前端校验会有问题,在前端代码中加入!!

后端校验:后端永远不会更新loginname
 

// 更新 user.setLoginName(null); //加上selective表示user里面的属性有值,我才会去更新,没有值就不更新,前面设置loginName为空,表示永远不进行更新 userMapper.updateByPrimaryKeySelective(user);

密码的两层加密处理

现在存到数据库中的密码是明文的,是非常危险的,我们应该把密码做一个MD5
是Spring内置的,不需要引入第三方的jar包,直接使用即可
 

request.setPassword(DigestUtils.md5DigestAsHex(request.getPassword().getBytes()));



在前端传输过程中容易被别人截取到

在前端也要做一层加密

盐值:原始字符串+拼接字符串,让原始字符串变得更复杂一点,让别人很难破解出来

两层加密:前端密码每次都拼上这个key,去做一个MD5,变成一个密文,这个密文再传到后端,后端再进行一次MD5加密.

增加重置密码功能

修改用户时,不能修改密码
前端隐藏 


后端 把密码清空,然后selective...
 

user.setPassword(null); userMapper.updateByPrimaryKeySelective(user);

前端v-if与v-show区别:

都可以用来显示和隐藏元素

v-show只是简单的隐藏,不显示
v-if会将这个元素直接删掉

v-if 初始的时候,就判断好是隐藏还是显示
v-show 是动态变化的(新增时显示  编辑时隐藏)

单独开发重置密码表单和接口

修改Controller,重置密码实体类,改Service

登录

前端输入用户名密码
校验用户名密码
生成token
后端保存token(redis)
前端保存token

校验

前端请求时,带上token(放在header)
登录拦截器,校验token(到redis获取token)
校验成功则继续后面的业务
校验失败则回到登录页面

单点登录系统

淘宝 支付宝
A B C…
X:用户管理、登录、登录校验、退出登录

token与JWT

token+redis:token是无意义的
JWT:token是有意义的,加密的,包含业务信息,一般是用户信息,可以被解出来

登录标识:就是令牌,就是token,就是一串唯一的字符串

高频面试题

简单的说说单点登录的方案
token和JWT是什么?

NotNull  会检验null
NotEmpty会检验null和“”

登录功能开发 后端增加登录接口

后端输入+输出参数
登录Req:用户名+密码
返回Resp:整个用户信息(除密码)
密码提示越详细,透露的消息越多,越不安全。给一个模糊提示,密码规则不正确

在Controller中写登录接口,调用UserService中的login方法,返回User实体类

Service
根据用户名去查

前端增加登录模态框

一刷新就全部都没有了
vuex=全局响应式变量

如果没登录,跳到首页或跳到登录页面
要给拦截的路由加一个属性
meta:{  自定义属性
     loginRequire:true

高频面试题

你们项目是否用过自定义异常,怎么用的?
自定一个BusinessException异常,继承的是运行时异常RuntimeException,封装自定义属性参数(枚举类实现),在捕获异常时返回自定义的参数和描述

你们项目的自定义异常是继承Exception还是RuntimeException?
继承的是运行时异常RuntimeException
Exception :受检查的异常,这种异常是强制我们catch或throw的异常。
RuntimeException:运行时异常,这种异常我们不需要处理,完全由虚拟机接管。

常用的加密算法有哪些?
对称加密算法(AES、DES、3DES),加密和解密采用相同的密钥,是可逆的
非对称加密算法(RSA、DSA、ECC)指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的
MD5:信息摘要算法5,单向的算法不可逆(被MD5加密的数据不能被解密)。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。常用在不可还原的密码存储、信息完整性校验等。

盐值有什么作用?
用户注册时,系统用来和用户密码进行组合而生成的随机数值,称作salt值,通称为加盐值。为用户密码添加Salt值,使得加密的得到的密文更加冷僻,不宜查询。

如何保证用户信息安全,比如数据库信息泄露了?
两层加密处理:前端对用户输入的密码进行MD5+盐值加密,后端对结果再次进行MD5加密,

简单的说说单点登录的方案
单点登录的意思是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
单点登录系统,所有需要登录的地方都调用该系统。一种方案是提供登录界面,登录完成后再跳转回原系统;另一种为只提供登录接口,不提供页面。

token和JWT是什么?
token+redis:token是无意义的随机字符串,保证唯一性就可以;
JWT JSON Web Token 是加密的有意义的数据(用户信息)

全局变量存储使用vuex和sessionStorage区别?
vuex存储数据刷新页面之后就清空,sessionStorage是H5内置,键值对形式存储数据,保存在浏览器会话窗口上,在关闭窗口或标签页之后将会删除这些数据

什么是vuex?(一句话说明vuex是做什么的)?
vuex就是一个全局的响应式的变量,方便其他组件从中获取信息

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。