什么是Spring Security
Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我 们来简化认证和授权的过程。
官网:Spring Security
对应的maven坐标:
<!--security启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
权限控制
认证和授权概念
问题1:在生产环境下我们如果不登录后台系统就可以完成这些功能操作吗?
答案显然是否定的,要操作这些功能必须首先登录到系统才可以。
问题2:是不是所有用户,只要登录成功就都可以操作所有功能呢?
答案是否定的,并不是所有的用户都可以操作这些功能。不同的用户可能拥有不同的权限,这就需要进行授权了。
认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。
授权:用户认证成功后,需要为用户授权,其实就是指定当前用户可以操作哪些功能。
权限模块数据模型(5张表和七张表)
前面已经分析了认证和授权的概念,要实现最终的权限控制,需要有一套表结构支撑:
用户表user、权限表permission、角色表role、菜单表menu、用户角色关系表 user_role、角色权限关系表role_permission、角色菜单关系表role_menu。
5张表
用户表user(name,password):阿三,阿五
用户角色关联表user_role(user_id,role_id)
角色表role(name):院长,医生,护士
角色权限许可关联表relo_permission(role_id,permission_id)
权限许可表permission(name):(菜单)检查项管理,检查组管理;(菜单内按钮)删除检查项,编辑检查组
7张表
用户表user(name,password):阿三,阿五
用户角色关联表user_role(user_id,role_id)
角色表role(name):院长,医生,护士
角色菜单许可关联表roel_menu(role_id,menu_id)
菜单许可表menu(name): 检查项管理,检查组管理
角色按钮许可关联表role_permission(role_id,permission_id)
按钮许可表表permission(name):删除检查项,编辑检查组
认证过程:只需要用户表就可以了,在用户登录时可以查询用户表user进行校验,判断用户输入的用户名和密码是否正确。
授权过程:用户必须完成认证之后才可以进行授权,首先可以根据用户查询其角色,再根据角色查询对应的菜单,这样就确定了用户能够看到哪些菜单。然后再根据用户的角 色查询对应的权限,这样就确定了用户拥有哪些权限。所以授权过程会用到上面5张表或者7张表。
同款产品对比
常用的权限框架除了Spring Security,还有Apache的shiro框架。
SpringSecurity
特点:
⚫ 和 Spring 无缝整合。
⚫ 全面的权限控制。
⚫ 专门为 Web 开发而设计。
◼旧版本不能脱离 Web 环境使用。
◼新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境。
⚫ 重量级。
Shiro
Apache 旗下的轻量级权限控制框架。
特点:
⚫ 轻量级。Shiro 主张的理念是把复杂的事情变简单。针对对性能有更高要求
的互联网应用有更好表现。
⚫ 通用性。
◼好处:不局限于 Web 环境,可以脱离 Web 环境使用。
◼缺陷:在 Web 环境下一些特定的需求需要手动编写代码定制。
Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是 Shiro 的天下。
相对于 Shiro,在 SSM 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro 虽然功能没有Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。
自从有了 Spring Boot 之后,Spring Boot 对于 Spring Security 提供了自动化配置方案,可以使用更少的配置来使用 Spring Security。
因此,一般来说,常见的安全管理技术栈的组合是这样的:
• SSM + Shiro
• Spring Boot/Spring Cloud + Spring Security
以上只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的