【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

这篇具有很好参考价值的文章主要介绍了【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4.权限管理模块开发

4.1 权限管理概述

4.1.1 权限管理的意义

后台管理系统中,通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源,分配用户菜单、资源权限,以及验证用户是否有访问资源权限。

4.1.2 RBAC权限设计模型

ACL介绍

ACL(Access Control List):访问控制列表 用户 -> 权限

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

ACL 模型,权限能直接赋予用户,例如将查看订单列表(权限)赋予某位运营人员(用户)。但是这种模式的缺点在于,但用户量达到一定量级的时候,那么就需要对每个用户都进行一次授权操作,那么这个工作量就会相当大。

RBAC介绍 (Role-Based Access Control,基于角色的访问控制)

RBAC 模型,这是软件设计中最常用的权限管理模型,相比于 ACL 模型,RBAC 模型在用户与权限之间多了一个元素「角色」,通过权限关联角色、角色关联用户的方法来间接地赋予用户权限,从而实现用户与权限的解耦。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

使用ACL模式时,当系统中存在多个用户拥有相同的权限,在分配的时候就要分别为这几个用户指定相同的权限,修改时也要为这几个用户的权限进行一一修改。

使用RBAC模式 有了角色后,我们只需要为该角色制定好权限后,将相同权限的用户都指定为同一个角色即可,便于权限管理。

4.1.3 权限管理相关概念

4.1.3.1 用户管理

用户管理中的用户主要是功能系统的使用者,这些用户是一个一个的员工个体,这些个体往往从两个维度来进行划分:行政关系(部门架构)、业务部门(业务架构)。

用户管理就是在此两个维度来给员工个体进行关联性的初步分群或者分组。按照行政部门或者按照业务线部门划分后,对应部门或者小组内的用户有着基本相似的系统功能使用需求和权限等级;

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.1.3.2 权限管理
1) 功能权限管理

功能权限管理:指的是用户可看到哪些模块,能操作哪些按钮,因为企业中的用户拥有不同的角色,拥有的职责也是不同的。

菜单级别的权限控制

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

操作按钮级别的权限控制

  • 在菜单级权限控制的基础上,将页面上的操作动作也一并管理维护,即页面上的操作按钮,简单说就是增、删、改、查等操作的统一授权管理,此种管理模式,可将权限控制得更加细致、准确。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

2) 数据权限管理

数据权限管理:指的是用户可看到哪些模块的哪些数据。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

例如:一个系统中包含多个清单(清单 1、清单 2、清单 3),系统管理员能对整个系统操作维护,也就可以对系统中的所有清单进行操作(增、删、改、查);

假如分配给二级管理员的是清单 1,那么他将只能对清单 1 进行操作(增、改、查);

如果是普通用户也许只有查看数据的权限,没有数据维操作的权限(查),这里的操作是指系统中所有可点击的按钮权限操作,列举的增删改查只是最常见的几种操作而已。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.1.3.3 角色管理

角色往往是基于业务管理需求而预先在系统中设定好的固定标签,每个角色对应明确的系统权限,其所拥有的系统权限一般不会随意更改,并且角色也不会随着用户的被添加和被移除而进行改变,相较于用户管理而言更加稳定;

1) 角色是资源或菜单权限的集合。通过角色对不同管理员分配不同的资源、菜单权限。拥有相同权限的用户可以访问相同的菜单和资源。可以理解为权限分组。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

2) 通过对用户分配角色,来最终实现用户的访问权限控制。一个用户可分配多个角色,这些角色的资源、菜单的并集即是用户可访问的全部资源。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.1.4 权限管理设计

4.1.4.1 权限关系图

权限管理包含用户、角色、菜单、三个个核心组件。通过建立这些组件之间的关联关系,来实现用户到菜单的权限控制。

权限管理组件的关系图:

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.1.4.2 权限数据库设计

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.2 Spring Security实战

4.2.1 Spring Security 简介

1) Spring Security 是 Spring 家族中的一个安全管理框架,可以轻松地与 Spring 应用程序集成, 它提供了一系列的安全服务和工具,用于保护企业应用程序的安全性。

Spring Security 提供了许多功能,包括身份验证(Authentication)、授权(Authorization)、访问控制、密码管理、单点登录(Single Sign-On)、攻击防范(如跨站点脚本攻击、SQL注入攻击)等。

2) 认证和授权也是SpringSecurity作为安全框架的核心功能

  • 认证(Authentication):验证用户的身份以确保用户是合法的,可以访问系统中的资源。

    这通常涉及用户身份验证,例如使用用户名和密码验证用户的身份,或者使用第三方身份验证提供程序进行身份验证,例如 OAuth2。

  • 授权(Authorization):控制用户对系统中资源的访问权限。这涉及将用户分配到特定的角色或权限,以控制他们可以执行哪些操作和访问哪些资源。

    例如,管理员可能有更多的权限,可以访问和修改系统的高级设置,而普通用户则只能访问他们自己的个人资料信息。

3) Spring Security 与 Shiro的区别?

  • 领域不同:Spring Security 是 Spring 生态系统的一部分,而 Shiro 是一个独立的框架。
  • 功能不同:Spring Security 提供了更完整的安全性解决方案,包括基于过滤器链的身份验证、授权、会话管理、密码管理、单点登录等功能。Shiro 更注重简化开发人员的安全需求,提供易于使用和灵活的 API。
  • 灵活性不同:Shiro 在配置和使用方面更加简单,提供了灵活性和易于集成性。相比之下,Spring Security 提供了更高级的功能,但需要更多的配置和学习成本。

一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。

4.2.2 Spring Security 快速入门

4.2.2.1 创建SpringBoot工程

1) 创建工程

2) 引入依赖

 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.7.8</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
 
     <groupId>com.xxx</groupId>
     <artifactId>springsecurity_example</artifactId>
     <version>0.0.1-SNAPSHOT</version>
 
     <properties>
         <java.version>11</java.version>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
 
 </project>
4.2.2.2 入门案例编写
  1. 启动类
 @SpringBootApplication
 public class SpringsecurityExampleApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SpringsecurityExampleApplication.class, args);
     }
 
 }
  1. Controller
 @RestController
 public class HelloController {
 
     @RequestMapping("/hello")
     public String hello(){
 
         return "hello";
     }
 }
  1. 引入SpringSecurity依赖
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
 </dependency>
  1. 登录页面
    访问http://localhost:8080/hello 会跳转到 http://localhost:8080/login

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

用户名是 user, 密码会打印到控制台

 Using generated security password: ac3218c5-3abe-4ac7-bade-3d6487b38bf3

退出登录

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

4.2.2.3 SpringSecurity工作流程分析

SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。这里我们可以看看入门案例中的过滤器。

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

图中只展示了核心过滤器,其它的非核心过滤器并没有在图中展示。

  • UsernamePasswordAuthenticationFilter: 负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。
  • ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。
  • FilterSecurityInterceptor:负责权限校验的过滤器。

Debug分析

  1. 添加断点

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理

  1. 获取容器中的Bean

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】,Spring boot,业务场景实例问题,spring boot,spring,后端,spring security,权限管理文章来源地址https://www.toymoban.com/news/detail-614572.html

到了这里,关于【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Spring Security实现权限控制

    要对Web资源进行保护,最好的办法莫过于Filter 要想对方法调用进行保护,最好的办法莫过于AOP。 Spring Security进行认证和鉴权的时候,就是利用的一系列的Filter来进行拦截的。 如图所示,一个请求想要访问到API就会从左到右经过蓝线框里的过滤器,其中 绿色部分是负责认证的

    2024年02月15日
    浏览(29)
  • 安全框架Spring Security是什么?如何理解Spring Security的权限管理?

    大家好,我是卷心菜。本篇主要讲解Spring Security的基本介绍和架构分析,如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻。 🎁 作者简介: 在校大学生一枚,Java领域新星创作者,Java、Python正在学习中,期待和大家一起学习一起进步~ 💗 个人主页:我是一棵卷心菜的

    2024年02月02日
    浏览(42)
  • Spring Security实现用户身份验证及权限管理

    Spring Security是Spring生态的一个成员,提供了一套Web应用安全性的完整解决方案。 Spring Security 旨在以一种自包含的方式进行操作,因此你不需要在 Java 运行时环境中放置任何特殊的配置文件。这种设计使部署极为方便,因为可以将目标 工件 (无论是 JAR还是WAR)从一个系统复

    2024年02月05日
    浏览(29)
  • 权限管理详解:认证、授权及Spring Security配置解析

    深入探讨权限管理的重要性与实现方式,包括认证、授权概念,基于角色和资源的访问控制方案,以及Spring Security框架的概述和快速入门指南。

    2023年04月10日
    浏览(31)
  • 微服务动态权限管理方案(Spring Cloud Gateway+Spring Cloud Security)

    微服务认证方案的大体方向是统一在网关层面认证鉴权,微服务只负责业务,和鉴权完全隔离 整体包含以下四个角色 客户端 :需要访问微服务资源 网关 :负责转发、认证、鉴权 OAuth2.0授权服务 :负责认证授权颁发令牌 微服务集合 :提供资源的一系列服务。 这里的客户端

    2024年02月12日
    浏览(39)
  • Spring Security6 最新版配置该怎么写,该如何实现动态权限管理

    Spring Security 在最近几个版本中配置的写法都有一些变化,很多常见的方法都废弃了,并且将在未来的 Spring Security7 中移除,因此又补充了一些新的内容,重新发一下,供各位使用 Spring Security 的小伙伴们参考。 接下来,我把从 Spring Security5.7 开始(对应 Spring Boot2.7 开始),各

    2024年02月12日
    浏览(37)
  • 【深入浅出 Spring Security(十一)】授权原理分析和持久化URL权限管理

    在 【深入浅出Spring Security(一)】Spring Security的整体架构 中小编解释过授权所用的三大组件,在此再解释说明一下(三大组件具体指:ConfigAttribute、AccessDecisionManager(决策管理器)、AccessDecisionVoter(决策投票器)) ConfigAttribute 在 Spring Security 中,用户请求一个资源(通常是

    2024年02月10日
    浏览(36)
  • springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理

    本系统为springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理。页面为极简模式,没有任何渲染。 源码:https://gitee.com/qfp17393120407/spring-boot_thymeleaf 架构截图 此处以用户表为例,其他表数据可在源码获取。 用户表 共用属性 共用属性自动填充配置

    2024年02月07日
    浏览(39)
  • 【Spring Security系列】一文带你了解权限框架与Spring Security核心概念

    权限框架是软件开发中用于管理 用户权限和访问控制 的工具。在企业或者我们毕设复杂的系统中,不同的用户或角色需要拥有不同的访问和操作权限,以确保系统的安全性和数据完整性。今天我们就讨论一下Java中的安全框架! 在企业的开发中,Spring Security,Shiro都是比较流

    2024年04月16日
    浏览(32)
  • Spring Security之基于HttpRequest配置权限

    今天我们重点聊聊授权方式的另外一种:基于HttpServletRequest配置权限 一个典型的配置demo 从这里也可以看出,要实现基于RBAC,还是比较容易的。也比较容易使用。但是如果想要动态的增加角色,就需要我们定制AuthorizationManager。 HttpSecurity是负责构建DefaultSecurityFilterChain的。而

    2024年04月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包