第 20 章 权限管理的基本概念
2009-07-13 14:33
148 查看
第 20 章 权限管理的基本概念
20.1. 认证与验证
Spring Security作为权限管理框架,其内部机制可分为两大部分,其一是认证授权auhorization,其二是权限校验authentication。认证授权authorization是指,根据用户提供的身份凭证,生成权限实体,并为之授予相应的权限。
权限校验authentication是指,用户请求访问被保护资源时,将被保护资源所需的权限和用户权限实体所拥护的权限二者进行比对,如果校验通过则用户可以访问被保护资源,否则拒绝访问。
我们之前讲过的form-login,http-basic, digest都属于认证授权authorization部分的概念,用户可以通过这些机制登录到系统中,系统会为用户生成权限主体,并授予相应的权限。
与之相对的,FilterSecurityInterceptor,Method保护,taglib,@Secured都属于权限校验authentication,无论是对URL的请求,对方法的调用,页面信息的显示,都要求用户拥有相应的权限才能访问,否则请求即被拒绝。
20.2. SecurityContext安全上下文
为使所有的组件都可以通过同一方式访问当前的权限实体,Spring Security特别提供了SecurityContext作为安全上下文,可以直接通过SecurityContextHolder获得当前线程中的SecurityContext。SecurityContext securityContext = SecurityContextHolder.getContext();
默认情况下,SecurityContext的实现基于ThreadLocal,系统会在每次用户请求时将SecurityContext与当前Thread进行绑定,这在web系统中是很常用的使用方式,服务器维护的线程池允许多个用户同时并发访问系统,而ThreadLocal可以保证隔离不同Thread之间的信息。
当时对于单机应用来说,因为只有一个人使用,并不存在并发的情况,所以完全可以让所有Thread都共享同一个SecurityContext,因此Spring Security为我们提供了不同的策略模式,我们可以通过设置系统变量的方式选择希望使用的策略类。
java -Dspring.security.strategy=MODE_GLOBAL com.family168.springsecuritybook.Main
也可以调用SecurityContextHolder的setStrategyName()方法来修改系统使用的策略。
SecurityContextHolder.setStrategyName("MODE_GLOBAL");
20.3. Authentication验证对象
SecurityContext中保存着实现了Authentication接口的对象,如果用户尚未通过认证,那么SecurityContext.getAuthenticaiton()方法就会返回null。可以使用Authentication接口中定义的几个方法,获得当前权限实体的信息。
public interface Authentication extends Principal, Serializable { GrantedAuthority[] getAuthorities();Object getCredentials();
Object getDetails();
Object getPrincipal();
boolean isAuthenticated(); void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException; }
默认情况下,会在某一个进行认证的过滤器中生成一个UsernamePasswordAuthenticationToken实例,并将此实例放到SecurityContext中。
相关文章推荐
- Linux成长之路(一)——基本概念及操作、用户及文件权限管理
- Oracle教程之Oracle管理权限(一)--Oracle权限基本概念,Oracle管理权限基本概念
- Linux成长之路(一)——基本概念及操作、用户及文件权限管理
- 权限管理的基本概念
- Linux权限管理(基本权限、默认权限)
- 存储器管理的基本概念
- 配置管理基本概念、配置管理计划、配置管理主要活动
- Unity3D 资源管理 -- 基本概念
- Oracle教程之管理索引(二)--Oracle索引基本概念
- 快速入门系列零:玛德界面库的来由、窗口、皮肤、项目管理等基本概念
- 学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
- 进程管理和终端驱动基本概念
- Linux设备驱动程序学习(20)-内存映射和DMA-基本概念
- .NET基本权限管理框架源代码
- MySQL中基本的用户和权限管理方法小结
- Linux--基本概念、常用命令、文件与用户管理
- AIX文件系统基本之逻辑元管理概念
- Oracle SQL 基本操作之 用户权限管理方法
- 一天一点学习Linux之文件与目录权限的基本概念【对工作目录(即当前目录)的说明】