安全框架Spring Security是什么?如何理解Spring Security的权限管理?

这篇具有很好参考价值的文章主要介绍了安全框架Spring Security是什么?如何理解Spring Security的权限管理?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


大家好,我是卷心菜。本篇主要讲解Spring Security的基本介绍和架构分析,如果您看完文章有所收获,可以三连支持博主哦~,嘻嘻。


一、前言

🎁作者简介:在校大学生一枚,Java领域新星创作者,Java、Python正在学习中,期待和大家一起学习一起进步~
💗个人主页:我是一棵卷心菜的个人主页
🔶本文专栏:Spring Security知识学习
📕自我提醒:多学多练多思考,编程能力才能节节高!

二、Spring Security简介

sprinf security可以不使用权限控制吗,安全,spring,系统安全,Spring Security

  • 官方文档: https://spring.io/projects/spring-security

  • Spring Security是⼀个功能强大、可高度定制的身份验证访问控制框架。它是保护基于Spring的应用程序的事实标准。

  • Spring Security是⼀个面向Java应用程序框架。与所有Spring项目⼀样,Spring Security的真正威力在于它可以轻松地扩展以满足定制需求。

三、权限管理

  • 在Spring Security中,权限管理主要包括两个方面:认证授权。简单来说,认证就是用户的登录认证;授权就是登录成功之后,用户可以访问资源的多少。

1、什么是权限管理

基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制 ,按照安全规则 或者 安全策略控制用户 可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限才可访问。

2、什么是认证

认证 ,就是判断⼀个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令(密码),看其是否与系统中存储的该用户的用户名和口令⼀致,来判断用户身份是否正确。这就好比我们登录QQ、微信、游戏账号等等需要的账号和密码~

3、什么是授权

授权 ,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限才可访问系统的资源,对于某些资源没有权限是无法访问的。这就好比学校的网站,有学生可以访问的资源,然而老师的资源学生就无法访问~

四、整体架构

在Spring Security的架构设计中, 认证授权 是分开的,但无论使用什么样的认证方式。都不会影响授权,这是两个独立的存在,这种独立带来的好处之⼀,就是可以非常方便地整合⼀些外部的方案。

核心类:
sprinf security可以不使用权限控制吗,安全,spring,系统安全,Spring Security

1、认证

  • AuthenticationManager 接口,在Spring Security中认证是由 AuthenticationManager 来负责的,接口定义为:
public interface AuthenticationManager {
    Authentication authenticate(Authentication var1) 
    			throws AuthenticationException;
}

注意:当返回Authentication 时,表示认证成功;当返回AuthenticationException异常时,表示认证失败。

AuthenticationManager 主要实现类为 ProviderManager,在 ProviderManager 中管理了众多AuthenticationProvider实例。在⼀次完整的认证流程中,Spring Security允许存在多个
AuthenticationProvider ,用来实现多种认证方式,这些 AuthenticationProvider 都是由
ProviderManager 进行统⼀管理的。

sprinf security可以不使用权限控制吗,安全,spring,系统安全,Spring Security


  • Authentication接口,认证以及认证成功的信息主要是由 Authentication 的实现类进行保存的,接口定义如下:
public interface Authentication extends Principal, Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();
    Object getCredentials();
    Object getDetails();
    Object getPrincipal();
    boolean isAuthenticated();
    void setAuthenticated(boolean var1) throws IllegalArgumentException;
}

方法介绍:

  • getAuthorities 获取用户权限信息
  • getCredentials 获取用户凭证信息,⼀般指密码
  • getDetails 获取用户详细信息
  • getPrincipal 获取用户身份信息,用户名、用户对象等
  • isAuthenticated 用户是否认证成功

  • SecurityContextHolder 类,SecurityContextHolder 用来获取登录之后用户信息。定义如下(省略了一些属性和方法):
public class SecurityContextHolder {
    public static void clearContext() {
        strategy.clearContext();
    }
    public static SecurityContext getContext() {
        return strategy.getContext();
    }
    public static int getInitializeCount() {
        return initializeCount;
    }
    public static void setContext(SecurityContext context) {
        strategy.setContext(context);
    }
    public static void setStrategyName(String strategyName) {
        strategyName = strategyName;
        initialize();
    }
    public static SecurityContextHolderStrategy getContextHolderStrategy() {
        return strategy;
    }
    public static SecurityContext createEmptyContext() {
        return strategy.createEmptyContext();
    }
    public String toString() {
        return "SecurityContextHolder[strategy='" + strategyName + "'; initializeCount=" + initializeCount + "]";
    }
}
  • Spring Security 会将登录用户数据保存在 Session 中。但是,为了使用方便,Spring Security在此基础上还做了一些改进,其中最主要的⼀个变化就是线程绑定。
  • 当用户登录成功后,Spring Security 会将登录成功的用户信息保存到SecurityContextHolder 中。SecurityContextHolder 中的数据保存默认是通过ThreadLocal 来实现的,使用ThreadLocal 创建的变量只能被当前线程访问,不能被其他线程访问和修改,也就是用户数据和请求线程绑定在⼀起。
  • 当登录请求处理完毕后,Spring Security 会将 SecurityContextHolder 中的数据拿出来保存到 Session 中,同时将 SecurityContexHolder 中的数据清空。以后每当有请求到来时,Spring Security 就会先从 Session 中取出用户登录数据,保存到 SecurityContextHolder 中,方便在该请求的后续处理过程中使用,同时在请求结束时将 SecurityContextHolder 中的数据拿出来保存到 Session 中,然后将SecurityContextHolder 中的数据清空。
  • 这⼀策略非常方便用户在 Controller、Service 层以及任何代码中获取当前登录用户数据。

2、授权

  • 在 Spring Security 的授权体系中,有两个关键接口:AccessDecisionManagerAccessDecisionVoter

AccessDecisionManager (访问决策管理器),用来决定此次访问是否被允许。接口定义如下:

public interface AccessDecisionManager {
    void decide(Authentication var1, Object var2, Collection<ConfigAttribute> var3) throws AccessDeniedException, InsufficientAuthenticationException;
    boolean supports(ConfigAttribute var1);
    boolean supports(Class<?> var1);
}

AccessDecisionVoter (访问决定投票器),投票器会检查⽤户是否具备应有的角色,进而投出赞成、反对或者弃权票。接口定义如下:

public interface AccessDecisionVoter<S> {
    int ACCESS_GRANTED = 1;
    int ACCESS_ABSTAIN = 0;
    int ACCESS_DENIED = -1;
    boolean supports(ConfigAttribute var1);
    boolean supports(Class<?> var1);
    int vote(Authentication var1, S var2, Collection<ConfigAttribute> var3);
}

需要注意的是:AccessDecisionManager中会挨个遍历 AccessDecisionVoter,进而决定是否允许用户访问。

ConfigAttribute,用来保存授权时的角色信息。接口定义如下:

public interface ConfigAttribute extends Serializable {
    String getAttribute();
}
  • 在 Spring Security 中,用户请求⼀个资源需要的角色会被封装成一个 ConfigAttribute 对象
  • 在 ConfigAttribute 中只有⼀个 getAttribute方法,该方法返回⼀个 String 字符串,就是角色的名称。⼀般来说,角色名称都带有⼀个 ROLE_ 前缀,投票器AccessDecisionVoter 所做的事情,其实就是比较用户所具各的角色和请求某个资源所需的 ConfigAtuibute 之间的关系。

感谢阅读,一起进步,嘻嘻~文章来源地址https://www.toymoban.com/news/detail-787160.html

到了这里,关于安全框架Spring Security是什么?如何理解Spring Security的权限管理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 13.Spring security权限管理

    13.1什么是权限管理 Spring security支持多种不同的认证方式,但是无论开发者使用哪种认证方式,都不会影响授权功能的使用,spring security很好地实现了认证和授权两大功能的解耦。 13.2Spring security权限管理策略 从技术上来说,spring security中提供的权限管理功能主要有两种类型

    2023年04月12日
    浏览(75)
  • Spring Security实现用户身份验证及权限管理

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

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

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

    2023年04月10日
    浏览(40)
  • 【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

    4.1.1 权限管理的意义 后台管理系统中,通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源,分配用户菜单、资源权限,以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 ACL介绍 ACL(Access Control List):访问控制列表 用户 - 权限 ACL 模型,权限

    2024年02月15日
    浏览(42)
  • Spring Security(安全框架)

    (1)Spring Security 是一个高度自定义的 安全框架 。利用Spring IoC/DI和AOP功能,为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作。 (2)认证(Authentication): 应用程序确认用户身份的过程,常见认证:登录。 (3)身份(principal)/主体(

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

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

    2024年02月12日
    浏览(53)
  • Spring Security安全登录的调用过程以及获取权限的调用过程

    (0)权限授理 首先调用SecurityConfig.java中的config函数将jwtAuthenticationTokenFilter过滤器放在UsernamePasswordAuthenticationFilter之前 (1)首先运行JwtAuthenticationTokenFilter extends OncePerRequestFilter中的doFilterInternal函数 这里由于没有获取到token,因此调用!StringUtils.hasText(token),这里使用 继续运行其他

    2024年02月09日
    浏览(41)
  • 【Spring Security】安全框架学习(十二)

    6.0 其他权限校验方法 我们前面都是使用@PreAuthorize注解,然后在在其中使用的是hasAuthority方法进行校验。Spring Security还为我们提供了其它方法. 例如:hasAnyAuthority,hasRole,hasAnyRole,等。 这里我们先不急着去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学习其他方法就

    2024年02月07日
    浏览(50)
  • 【Spring Security】安全框架学习(八)

    3.0 权限系统的作用 例如一个学校图书馆的管理系统,如果是普通学生登录就能看到借书还书相关的功能,不可能让他看到并且去使用添加书籍信息,删除书籍信息等功能。但是如果是一个图书馆管理员的账号登录了,应该就能看到并使用添加书籍信息,删除书籍信息等功能

    2024年02月09日
    浏览(60)
  • Shiro和Spring Security安全框架对比

    Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单。与Spring Security对比,Shiro可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。下面对这两个安全框架进行了对比,可以

    2024年02月10日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包