spring security、shiro

1.spring security-认证授权概念,session、token的认证区别,授权的数据模型,RBAC实现授权

              认证相关说明

                     认证定义:判断用户身份是否合法的过程,访问系统资源验证用户身份信息,合法可继续访问,否则进行拦截

                     认证作用:保护系统隐私数据和资源,保证用户认证身份的合法性

                     常见认证方式:用户名密码登录、二维码登录、短信登录、指纹验证、人脸验证等

                     会话定义:用户认证通过后,避免每次操作都进行认证,将用户信息保存在会话中,为了保持当前用户登录状态的机制,常见方式有基于session方式、基于token方式等

                     基于session认证流程:用户认证成功之后,服务端生成相关的数据保存在session(当前会话)中,发给客户端的session_id存放到coodie中,这样客户端发起请求携带session_id,即可判断服务端是否存在session数据,以此来完成用户的合法校验。当用户注销系统或session过期失效,客户端的session_id就无效了

                     基于token认证流程:用户认证成功后,服务端生成一个token给到客户端,存储在cookie或localstorage中,每次请求携带token,服务端收到token后通过验证即可确认用户身份

                     基于session和基于token的区别:基于session由servlet规范制定,服务端存储session需要占用内存资源,客户端需要支持cookie;基于token一般服务端不需要存储token,并且不限制客户端存储方式。如今更多客户端需要接入服务端,并且系统多采用前后端分离架构实现,使用token方式进行验证更合适。

              授权相关说明

                   定义:用户认证通过用户的权限来控制用户访问资源的过程,有权限则可以访问,无权则禁止访问

                     作用:更细粒度的对隐私数据进行划分,在用户认证之后进行,控制不同的用户能够访问不同的资源

                     授权数据模型:可简单理解为那些用户对那些资源进行那些操作。分为主体、资源、权限/许可三部分。企业开发中通常将资源和权限合并为1张表(权限id、资源名称等字段)

                     RBAC(Role-Based Access Control):基于角色的访问控制,按角色进行授权。判断主体的角色是否是某角色

                     RBAC(Resource-Based Access Control):基于资源的访问控制,按资源进行授权。判断主体拥有的权限是否包含某权限

    2.基于session实现认证授权功能

              基于session认证由servlet规范定制,servlet已经实现,使用HttpSession即可实现

  3.spring security介绍、简单使用、springboot整合spring security 

              spring security介绍

                     定义:为基于spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架,实现了认证和授权,提供了基于账号和密码的认证,通过安全配置实现请求拦截、授权。但不仅仅是这些

              认证

                     spring security默认提供认证界面,无需额外开发

                     安全配置:spring security提供了用户名密码登录、退出、会话认证等功能,只需配置即可。自定义类继承WebSecurityConfigurerAdapter,使用@EnableWebSecurity注解修饰

                     spring security初始化:将继承WebSecurityConfigurerAdapter的类注入spring容器即可

                     服务启动后,请求http://ip:端口/security-spring-security路径即可出现security默认认证界面,登录成功后会跳转至自己配置编写的界面

              授权

                     对用户的访问进行拦截校验,校验用户权限是否可以操作指定资源,spring security默认提供授权实现方法

              springboot整合spring

                     spring mvc是一个实现mvc架构的web框架,专注于处理http请求和实现web层的逻辑

                     springboot是一个快速开发平台,不仅包含springmvc作为其可能组件之一,还通过自动配置和默认配置简化了整合spring应用的搭建过程,开发者聚焦于业务逻辑实现,而非配置细节。因此springboot可看作包含springmvc且在其基础上简化和加速应用开发的工具

4.spring security认证、授权的原理

              spring security原理:基于一系列过滤器链来拦截用户发送的请求,解决安全访问控制问题,而安全访问控制其实就是对所有请求进行拦截,校验每个请求是否能访问其所期望的资源

    5.spring security自定义登录界面、连接数据库进行认证、url授权,方法授权

              自定义登录界面:创建自定义的登录界面,并在配置文件中指定;spring security为防止CSRF(跨站请求伪造)的发生,限制了除get请求外的大多数方法,可在配置文件中屏蔽CSRF限制

              连接数据库认证:从数据库中读取用户信息

              会话:

                     用户认证通过之后,避免每次请求都进行认证,将认证信息保存在会话中,spring security提供会话管理,认证通过后将认证信息放入SecurityContextHolder上下文,SecurityContext与当前线程进行绑定,方便获取用户信息

                     获取当前用户信息方式:SecurityContextHolder.getContext().getAuthecication();

                     会话控制:

                            always:没有session则创建1个

                            ifrequired:如果需要就创建一个session 。默认方式

                            never:springsecurity不会创建session,但如果应用中其他地方创建了session,spring security将会使用它

                            stateless:spring security绝不创建session,也不会使用session。在配置类中进行配置

                     会话超时:

                            通过server.servlet.session.timeout=XXs,来进行设置,并可在配置类中配置会话超时及会话无效的跳转地址

                     安全会话coodie:如果httpOnly则浏览器脚本无法访问cookie;如果secure为true,则cookie仅通过https发送

              注销:spring security默认实现了注销功能,也可自定义推出成功后的界面(在配置类中配置);注销之后,会使httpsession无效,并清除SecutityContextHolder,跳转到退出后界面

              授权

                     概述:包含web授权和方法授权2种方式。web授权是通过url拦截进行授权,方法授权是通过方法拦截进行授权。如果同时通过web授权和方法授权,则先通过web授权再通过方法授权

                                   web授权是通过FilterSecurityInterceptor拦截,方法授权是通过MethodSecurityInterceptor进行拦截

                     web授权:通过http.authorizeRequests来实现web授权

                     方法授权:在任何配置上上使用@EnableGlobalMethodSecurity(prePostEnabled=true)来启动基于注解的安全性,随后在方法上使用@PreAuthorize、@PostAuthorize、@Secured来支持服务层方法的安全性,从而限制该方法的访问

    6.JWT-概念、认证流程、结构、使用JWT

              JWT(json web token)概念:通过json形式作为web应用之间的令牌,用于在各方之间安全地将信息作为json传输,数据传输过程种可完成加密、签名等处理

              JWT作用:单点登录,实现授权;进行信息传输

              为何使用jwt不使用session:

                     session缺点:

                            session保存在内存中,随着认证用户的增多,服务端开销明显增大

                            用户认证之后,认证数据保存在某台服务器的内存中,下次请求必须也得从这台服务器发起请求才可拿到授权的资源,在分布式的应用上,先对限制了负载均衡器的能力

                            session基于cookie进行用户识别,如果cookie被截获,很容易收到跨站请求伪造攻击

                     JWT认证方式:

                            首先客户端将用户名和密码通过https协议(SSL)加密传输至后端

                            后端核对用户信息通过后,将用户的id等信息作为JWT Payload(负载),将其与头部分别进行base64编码拼接后签名,形成JWT。格式为:head.payload.singurater

                            后端将生成的JWT返回前端,前端将其保存在localstorage或sessionstorage上,退出登录后前端删除保存的JWT

                            前端每次请求在header中将JWT放入Authorization中

                            后端接收请求后判断JWT的有效性。如签名是否正确,token是否过期等

                            验证token有效之后,根据token中包含的用户信息进行后续逻辑操作,返回结果

                     JWT优势:

                            简洁:可通过URL、POST请求参数或header中发送,数据量小,传输速度块

                            自包含:负载中包含了用户的信息,避免多次查询数据库

                            跨语言:token以json加密形式保存在客户端,所以JWT是跨语言,原则上任何web形式都支持

                            无需在服务端存储会话信息,适合分布式微服务

              JWT结构

                     JWT令牌= Header.Payload.Signature  表头.有效负载.签名

                     Header:通常由两部分构成,令牌的类型(即JWT)和所使用的签名算法。使用Base64编码组成JWT的第一部分

                     Payload:其中包含声明。声明是有关实体和其他数据的声明(存放用户信息),负载中不应存放密码等敏感信息,id可存放。使用Base64编码组成JWT的第二部分

                     Signature:使用编码后的header和payload以及服务端提供的密钥,然后使用header中指定的签名算法进行签名,签名作用是保证JWT没有被篡改过

                     JWT还经常用于设计用户认证和授权系统,甚至实现web的单点登录

              JWT使用

                     引入java-jwt依赖;生成token;验证和解析token

              JWT工具类封装  

    7.spring boot整合JWT 

              为了避免每个方法中都进行token验证,可定义拦截器统一进行token验证

    8.安全框架shiro-shiro简介、架构、Quickstart程序

              shiro简介:Apache Shiro是java的一个安全权限框架,可完成认证、授权、加密、会话管理、与web集成、缓存等

                     功能简介:

                            Authentication:身份认证(登录)

                            Authorization:授权,权限验证

                            Session Management:会话管理

                            cryptography:加密

                            Web support:web支持

                            Caching:缓存

                            Concurrency:支持多线程应用的并发验证

                            Testing:测试支持

                            Run as:允许用户假装另一个用户进行访问

                            Remeber me:记住我,此次登录后下次访问无需登录

                     shiro架构

                            从外部看:

                                   应用代码直接交互对象是Subject,Subject代表当前'用户',与Subject的所有交互都为委托给SecurityManager,Subject就是一个门面,SecurityManager是真正的执行者;

                                   SecurityManager(安全管理器),所有与安全有关的操作都会与SecurityManager交互,是shiro的核心,负责与shiro的其他组件进行交互

                                   Relam:Shiro从Relam获取安全数据(如用户、角色、权限等)

                            从内部看Shiro:   

                                   Subject:任何可以与应用交互的用户

                                  SecurityManager:所有交互都要通过shiro进行控制,管理着所有subject,并负责进行认证、授权、会话、缓存的功能

                                   Authenicator:负责subject认证

                                   Authorizer:授权器,访问控制器

                                   Relam:可有1个或多个,可认为是安全实体数据源,用于获取安全实体;可是JDBC实现,也可是内存实现。应用中通常实现自己的Relam。

                                   SessionManager:管理session声明周期的组件

                                   CacheManager:缓存管理器

                                   Cryptography:密码模块

              shiro-hello world

                     下载shiro后,将log4j.properties和shiro.ini拷贝到resouce文件夹下,将QuickStart.class拷贝到java目录下

    9.springboot整合shiro

              引入pon依赖;创建springboot_shiro表;定义实体至controller;自定义Relam;ShiroConfig配置类

    10.shiro认证、授权流程

              认证流程

                     调用SecurityUrils.getSubject();获取当前Subject

                     调用Subject的isAuthenication()判断当前用户是否被认证,即是否登录

                     若无认证,将用户名和密码封装为UsernamePasswordToken对象

                     前台执行登录,调用Subject的login(Authenication)方法

                     自定义Relam,从数据库获取用户对象,返回给Shiro

                     Shiro内部完成密码的比对

              认证实现:

                     获取当前Subject用户;封装用户登录数据;执行登录方法

              shiro实现盐值加密MD5

                     使用MD5盐值加密作用:即便密码相同,加密后的密码也不相同

                     ByteSource.Util.bytes(String s);获取盐值。盐值需唯一,一般用随机字符串或user_id

              授权:也叫访问控制,在应用中控制谁可以访问那些资源

                     主体:访问应用的用户;

                     资源:应用中可以访问的URL

                     权限:应用中用户能否访问某个资源

                    Shiro支持粗粒度权限(用户模块的所有权限)和细粒度权限(操作某个用户的权限)

                     角色:权限的集合

                     实现过程:自定义Relam集成AuthorizingRelam,实现doGetAuthorizationInfo方法

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring SecurityShiro和Sa-Token都是用于身份验证和访问控制的安全框架,但它们有不同的特点和核心架构。 1. Spring Security: - 核心架构:Spring Security是基于过滤器链(Filter Chain)的安全框架,通过一系列的过滤器来对请求进行安全验证和访问控制。 - 特点:Spring Security提供了全面的安全解决方案,包括身份验证、授权、记住我等功能。它与Spring框架无缝集成,并且具有灵活性和可扩展性。 - 使用示例:在Spring Boot项目中,您可以通过添加Spring Security的依赖并配置相关的安全规则来实现身份验证和授权功能。 2. Shiro: - 核心架构:Shiro是一个轻量级的Java安全框架,使用一组过滤器和拦截器来处理身份验证和授权。 - 特点:Shiro提供了简单易用的API,可以轻松地实现身份验证、授权、加密等功能。它具有灵活性和可扩展性,并且可以与任何Java应用程序集成。 - 使用示例:在Java应用程序中,您可以使用Shiro的API来实现身份验证和授权。配置Shiro的INI文件或编程方式来定义安全规则。 3. Sa-Token: - 核心架构:Sa-Token是一个基于Token的轻量级Java安全框架,使用Token进行身份验证和授权。 - 特点:Sa-Token具有简单易用、高性能和低侵入性的特点。它使用Token来管理用户身份,支持多种Token生成和存储方式,并提供了丰富的权限控制功能。 - 使用示例:在Java应用程序中,您可以使用Sa-Token的API来生成和验证Token,并通过注解或编程方式定义访问控制规则。 总结来说,Spring Security是一个全面的安全框架,Shiro是一个灵活易用的安全框架,而Sa-Token是一个基于Token的轻量级安全框架。您可以根据项目需求和个人偏好选择适合的框架进行使用。具体的使用方法和示例可以参考它们的官方文档或相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值