Spring Security的理论知识部分(一)

#spring security# 标题
1.Spring security提供了声明式的安全访问控制解决方案(仅支持基于spring的应用程序)。功能分为两个:验证和授权

2.Spring security的3个核心概念。
Principle:代表用户的对象Principle(User),不仅指人类,还包括一切用于验证的设备。
Authority:代表永和的角色Authority(Role),每个用户都会有一种角色,如管理员或会员。
Permission:代表授权,复杂的应用环境需要对角色的权限进行表述。

在spring security中,authority和permission是两个完全独立的概念,两者并没有必然的联系。他们之间需要通过配置进行关联,可以是自己定义的各种关系。

3.验证和授权。
(1)验证:建立系统使用者信息的过程,可以是一个用户,设备或者在应用程序中执行某种操作的其他系统。
一般要求用户提供用户名和密码,系统通过校验用户名和密码的正确性来完成认证的通过或拒绝过程。
步骤如下:
1.用户使用用户名和密码登录。
2.过滤器获取到用户名、密码,然后封装成Authentication.
3.AuthenticationManager认证token(Authentication的实现类传递)
4.AuthenticationManager认证成功,返回一个封装了用户信息权限信息的Authentication对象,用户的上下文信息(角色列表等)。
5.Authentication对象赋值给当前的SecurityContext,建立这个用户的安全上下文。
6.用户进行一些受到访问控制机制保护的操作,访问控制机制会依据当前安全上下文信息检查这个操作所需的权限。
(2)授权:在一个系统中,不同用户具有的权限是不同的。一般来说,系统会为不同的用户分配不同角色,而每个角色则对应一系列的权限。
它判断某个Principle在应用程序中是否允许执行某个操作。在进行授权判断之前,要求其所要使用到的规则必须在验证过程中已经建立好了。
在web资源的保护,最好的办法是使用过滤器,对方法调用的保护,最好的办法是使用AOP。

4.核心类
(1)SecurityContext:包含当前正在访问系统的用户的详细信息,只有两种方法。
----getAuthentication():获取当前经过身份验证的主体或身份认证的请求令牌。
----setAuthentication():更改或删除当前已验证的主题身份验证信息。
(2)SecurityContextHolder:用来保存SecurityContext。最常用的是getContext()方法,用来获得当前SecurityContext。
(3)ProviderManager:会维护一个认证的列表,以便处理不同认证方式的认证,因为系统可能会存在多种认证方式,比如手机号、用户名密码、邮箱方式。
在认证时,如果ProviderManager的认证结果不是null,则说明认证成功,不在进行其他方式的认证,并且作为认证的结果保存在SecurityContext中,如果不成功,则跑出错误信息“ProviderNotFoundException”。
(4)DaoAuthenticationProvider:是AuthenticationProvider最常用的实现,用户获取用户提交的用户名和密码,并进行正确性比对。如果正确,则返回一个数据库中的用户信息。
当用户在前台提交了用户名和密码之后,就会被封装成UsernamePasswordAuthentication-Token。然后DaoAuthenticationProvider根据retrieveUser方法,交给additionAuthentication-Checks方法完成UsernamePasswordAuthenticationToken和userDetails密码的比对。如果这个方法没有抛出异常,则认为比对成功。
(5)UserDetail:是Spring Security的用户实体类,包含用户名、密码、权限等信息。Spring Security默认实现了内置的User类,供Spring Security安全认证使用。当然,也可以自己实现。
(6)UserDetailsService:用户相关的信息是通过UserDetailsService接口来加载的。该接口的唯一方法是loadUserByUsername(String username),用来根据用户名加载相关信息。这个方法的返回值是UserDetails接口,其中包含了用户的信息、包括用户名、密码、权限、是否启用、是否被锁定、是否过期等。
(7)GrantedAuthority:只定义了一个getAuthority()方法。该方法返回一个字符串,表示对应权限的字符串。如果对应权限不能用字符表示,则返回null。
GrantedAuthority接口通过UserDetailsService进行加载,然后赋予UserDetails。

持久化登录的用户信息。用户信息会被保存到session,cookie或redis中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙怪神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值