Spring Security简介和原理

什么是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原理

Spring Security的原理主要基于过滤器链的概念。在Web应用程序中,每个请求都会通过一系列的过滤器,Spring Security就是在这个过程中介入并进行安全相关的操作。

Spring Security的核心原理可以概括为以下几点:

1. 认证(Authentication):认证是验证用户身份的过程。用户提供用户名和密码,通过Spring Security的认证过程进行验证。认证可以使用内置的用户名密码验证、LDAP、数据库验证或自定义验证等。

2. 授权(Authorization):授权是检查用户对资源的访问权限。一旦用户身份被认证,Spring Security会根据定义的授权策略来确定用户是否有权访问请求的资源。

3. 过滤器链(Filter Chain):Spring Security的核心机制是通过一系列的过滤器链来处理请求。每个过滤器负责不同的安全任务,比如身份验证、授权、会话管理等。过滤器链可以根据应用程序的需求进行定制和配置。

4. 安全上下文(Security Context):安全上下文是Spring Security用于存储当前用户的安全信息,比如认证信息、授权信息等。安全上下文可以通过`SecurityContextHolder`来访问和管理。

5. 注解支持:Spring Security提供了一组注解,可以在应用程序中方便地进行权限控制。例如,@PreAuthorize注解可以用于在方法级别进行授权检查。

总结来说,Spring Security通过认证、授权和过滤器链的机制,提供了一套完整的安全解决方案,可以保护应用程序免受未经授权的访问。它的灵活性和易用性使得开发人员可以快速集成和定制安全功能。

同款产品对比

常用的权限框架除了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

以上只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值