项目介绍
表的设计
- 用户表
- 用户名
- 用户 id
- 用户密码
- 所属院系 id
- 创建和修改时间
- 角色表
- 角色 id
- 角色名称
- 权限表
- 权限id
- 权限名称
- 权限标识
- 权限类型
- 父权限 id
- 用户-角色表
- 角色-权限表
- 院系表
- 图书表
权限管理
复杂的权限管理: 用户对应角色,角色对应权限,基于角色的权限管理(RBAC)
后台管理系统
基于 vue 和 element-ui 的一套后台管理系统模板 vue-admin-template
密码问题
要对保存到数据库的密码进行加密;我们现在主流的做法都是基于 Hash 的加密算法来实现对密码的加密;因为Hash是不可逆的;
Md5
根据一个明文生成唯一的一串密文;只要改变明文中的任意一个字符,密文都会发生极大的变化;
如果密码太简单可能通过第三方的数据库进行对比查询
,那么我们就有其他解决方案:
- 二次md5
- 加盐(salt)
登录模块
完整的登录的解决方案
基于 session 的登录(使用与传统的 web 复合项目)
现在主流的登录方式不会使用这种形式,因为现在我们在商业项目中,可能服务的客户端不只是浏览器,有可能是小程序,安卓app,IOSapp,而 app 是不支持 cookie 的
基于 JWT 的登录
跨域问题
一个域的三要素:
- 协议
- 主机/域名
- 端口
默认浏览器中不支持后台的ajax跨域访问的;处于安全因素考虑的
浏览器对于javascript的同源策略的限制,例如http://a.cn下面的js不能调用http://b.cn中的js对象或数据(因为http://a.cn和http://b.cn是不同域)
同源策略会阻止一个域的JavaScript脚本和另一个域的内容进行交互
跨域问题的解决方案:
前端解决(通过代理的方式解决,不推荐)
后端解决(真正意义上解决了跨域问题)
CORS方案,就是通过服务器设置响应头来实现跨域 。
CORS才是解决跨域的真正解决方案。
前端需要做什么?无需做任何事情,正常发送Ajax请求即可。
后端需要做什么?
需要加响应头 。或者使用第三方模块 cors 。
WebConfig配置类解决跨域问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class WebConfig implements WebMvcConfigurer {
public void addCorsMappings(CorsRegistry registry) {
//设置允许跨域的路径
registry.addMapping("/**")
//设置允许跨域请求的域名
.allowedOriginPatterns("*")
//是否允许cookie
.allowCredentials(true)
//设置允许的请求方式
.allowedMethods("GET", "POST", "DELETE", "PUT")
//设置允许的header属性
.allowedHeaders("*")
//跨域允许时间
.maxAge(3600);
}
}