service中根据用户名查询
查询实体类UserQueryReq
保存实体类UserSaveReq加了一个长度校验,正则判断
用户名重复校验与自定义异常
新增用户时,增加用户名重复校验
在service中添加根据loginName查询的方法
public User selectByLoginName(String LoginName) { UserExample userExample = new UserExample(); UserExample.Criteria criteria = userExample.createCriteria(); criteria.andLoginNameEqualTo(LoginName); List
在新增插入之前进行一次判断,如果查出来用户名为空,可以进行新增
校验重复时,抛出自定义异常
针对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就是一个全局的响应式的变量,方便其他组件从中获取信息