登录与认证(一)

1. 背景

1.1 三个概念

1.1.1 cookie

Cookie是Web应用中常用的一种认证机制,通过在客户端存储一些信息,如用户名、密码等,实现用户身份的认证。

1.1.2 session

Session是一个存储用户会话状态的对象。当用户首次访问一个网站时,服务器会创建一个Session对象,用于存储用户的会话信息,如用户名、密码等。当用户重新访问该网站时,服务器会与该Session对象进行比较,如果一致,则允许该用户继续访问网站,否则将拒绝该用户的访问。

1.1.3 token

Token是一种身份验证机制,通过在客户端存储一些信息,如令牌号、时间戳等,实现用户身份的认证。在Spring Security中,Token也是一种认证方式,通过在客户端存储用户的令牌信息,实现用户身份的认证。

1.2 需解决的问题

认证(Authentication):验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户。
​授权(Authorization):经过认证后判断当前用户是否有权限进行某个操作。
​ 认证和授权就是SpringSecurity作为安全框架的核心功能。

2. 简介

Spring Security是一个基于Spring框架的安全管理模块,它提供了身份认证、授权、加密、会话管理等功能,可以保护Web应用程序免受恶意攻击和非法访问。Spring Security可以与Spring Boot无缝集成,提供了自动化配置和灵活的扩展机制。

Shiro是一个开源的安全框架,它简洁地处理身份认证、授权、企业会话管理和加密等问题。Shiro的设计目标是易于使用和理解,它可以在任何应用程序环境下工作,不依赖于其他第三方框架或容器。Shiro提供了一套直观和易用的API,来简化开发人员在实现应用程序安全上的努力。

本文将对比Spring Security和Shiro两个框架的特点和使用方法,并给出一个基于Spring Boot的示例项目,展示如何使用这两个框架来实现登录与认证功能。

3. 框架

3.1 shiro框架介绍

Shiro框架的核心概念有三个:Subject,SecurityManager和Realms。

  • Subject:代表当前与应用程序交互的实体(用户,第三方服务,cron job等),它提供了身份认证、授权、会话管理等接口。开发人员只需要与Subject交互,就可以完成安全相关的操作。
  • SecurityManager:是Shiro框架的心脏,它是一个“保护伞”对象,协调内部的安全组件共同工作。它也管理每个应用程序用户的Shiro视图,知道如何执行每个用户的安全操作。当与Subject交互时,实际上是SecurityManager处理所有繁重的安全操作。
  • Realms:是Shiro和应用程序安全数据之间的“桥梁”或“连接器”。当需要执行身份验证或授权时,Shiro会从一个或多个配置的Realm中获取相关的数据。Realm本质上是一个特定安全的DAO,它封装了数据源的连接细节,使Shiro所需的数据可用。

Shiro框架还提供了一些其他功能来支持和增强不同环境下的安全需求,如:

  • Web Support:Shiro的Web支持API能够轻松地帮助保护Web应用程序。
  • Caching:缓存是Shiro中的一等公民,来确保安全操作快速而高效。
  • Concurrency:Shiro利用它的并发特性来支持多线程应用程序。
  • Testing:测试支持帮助编写单元测试和集成测试,并确保应用程序安全。
  • Run As:允许用户假设另一个用户身份(如果允许)的功能,在管理脚本中很有用。
  • Remember Me:在会话中记住用户身份,使他们只需要在强制时登录。

下图展示了Shiro框架的核心组件及其关系:
在这里插入图片描述

3.2 spring security的使用

Spring Security框架的核心概念有四个:Authentication,Authorization,FilterChain和WebSecurityConfigurerAdapter。

  • Authentication:代表用户的身份信息,包括用户名、密码、角色等。Spring Security提供了多种Authentication实现,如UsernamePasswordAuthenticationToken,JwtAuthenticationToken等。AuthenticationManager是一个接口,负责验证Authentication对象,并返回一个经过认证的Authentication对象或抛出异常。Spring Security提供了多种AuthenticationManager实现,如ProviderManager,DaoAuthenticationProvider等。
  • Authorization:代表用户的访问控制信息,包括用户可以访问哪些资源,以及可以执行哪些操作。Spring Security提供了多种Authorization实现,如AccessDecisionManager,AccessDecisionVoter等。AccessDecisionManager是一个接口,负责根据Authentication对象和请求的资源(FilterInvocation)来决定是否允许访问或抛出异常。AccessDecisionVoter是一个接口,负责对某个请求进行投票,返回赞成、反对或弃权的结果。
  • FilterChain:是一个过滤器链,负责拦截请求,并调用相应的过滤器进行处理。Spring Security提供了多种Filter实现,如UsernamePasswordAuthenticationFilter,JwtAuthenticationFilter等。Filter是一个接口,负责根据请求的信息和配置的规则来执行相应的逻辑,并返回相应的结果或继续调用下一个Filter。
  • WebSecurityConfigurerAdapter:是一个抽象类,负责配置WebSecurity和HttpSecurity对象。WebSecurity是一个类,负责配置FilterChain和相关的过滤器。HttpSecurity是一个类,负责配置请求的匹配规则和授权规则。开发人员可以通过继承WebSecurityConfigurerAdapter类,并重写其中的方法来自定义Web安全配置。

Spring Security框架还提供了一些其他功能来支持和增强不同环境下的安全需求,如:

  • Web Support:Spring Security提供了一些Web相关的组件和注解,如 @PreAuthorize@PostAuthorize等,来简化Web层的安全控制。
  • Caching:Spring Security支持使用缓存来存储用户的身份信息和权限信息,来提高性能和减少数据库访问。
  • Concurrency:Spring Security支持使用会话管理来控制用户的并发登录数量和过期策略。
    Testing:Spring Security提供了一些测试工具类和注解,如@WithMockUser,@WithUserDetails等,来方便编写测试用例。
  • OAuth 2.0:Spring Security支持使用OAuth 2.0协议来实现第三方认证和授权功能。
  • JWT:Spring Security支持使用JWT(JSON Web Token)来实现无状态的身份认证和授权功能。

下图展示了Spring Security框架的核心组件及其关系:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值