- 浏览: 193794 次
- 性别:
- 来自: 南京
文章分类
最新评论
前言:
本文主要讲述在spring security鉴权的实现方式,目前spring security 支持基于 spring aop、filter、aspectj三种认证方式,分别提供对方法调用、web请求、业务对象的访问控制。在spring security中健全主要是由AccessDecisionManager这个类完成的,这个类有一个decide方法,接受一个代表认证者信息的Authentication对象,一个安全对象(security object),以及一个和这个对象相关联的安全属性列表(例如代表所需权限的角色列表)
1. AOP通知
在spring aop中有四种通知类型:before、after、throws和around。其中around通知可以选择是否执行方法调用,是否修改返回结果,是否抛出异常。spring security就是利用around对方法调用进行保护,利用filter对web请求进行保护。
在大多数应用中,我们只需要利用spring aop对service层的方法调用进行保护就可以了,因为这里是我们主要的业务实现的地方。倘若我们还需要直接对业务对象进行保护,那就需要考虑使用AspectJ来完成,另外AspectJ也可以实现对方法调用的保护。在实际应哟个中,我们可以根据需求选择,也可以选择两种、三种组合使用。当前的主流做法是利用filter来做web请求认证,结合着spring aop对service层的方法进行认证保护。
2.安全对象和AbstractSecurityInterceptor
在spring security中安全对象指的是需要有安全措施的对象,最常见的例子就是方法调用和web请求。
每一种安全对象类型都有其对应的继承了AbstractSecurityInterceptor的拦截器类。最重要的是,在AbstractSecurityInterceptor被调用的时候,如果用户已经认证过,SecurityContextHolder中肯定会包含一个有效的Authentication对象。
AbstractSecurityInterceptor拦截器一般的执行流程如下:
3.配置属性:Configuration Attributes
配置属性可以简单的认为是对AbstractSecurityInterceptor有特殊含义的字符串,在spring security中用ConfigAttribute类来表示。根据AccessDecisionManager的具体实现,这个属性即可以是一个简单角色名称,也可以包含特定意义。在AbstractSecurityInterceptor中有一个securityMetadataSource属性,用来查找当前被访问对象对应的配置属性,AbstractSecurityInterceptor的具体实现类的SecurityMetadataSource属性也不相同,FilterSecurityInterceptor中用FilterInvocationSecurityMetadataSource来表示这些安全属性,MethodSecurityInterceptor用MethodSecurityMetadataSource来表示,对应的设置方式也不相同,FilterInvocationSecurityMetadataSource通过uris来设置,MethodSecurityMetadataSource通过方法上的注解来设置
代表着url: /admin/**对应的配置属性为ADMIN,在实际运行时,这代表着任何用户拥有ADMIN角色的权限就可以访问/admin/**这个url。因此严格来说,配置属性仅仅是一些普通的属性,具体这些属性如何解析是取决于AccessDecisionManager的实现类的,在后续章节中我们会继续探讨AccessDecisionManager是如何实现的。
本文主要讲述在spring security鉴权的实现方式,目前spring security 支持基于 spring aop、filter、aspectj三种认证方式,分别提供对方法调用、web请求、业务对象的访问控制。在spring security中健全主要是由AccessDecisionManager这个类完成的,这个类有一个decide方法,接受一个代表认证者信息的Authentication对象,一个安全对象(security object),以及一个和这个对象相关联的安全属性列表(例如代表所需权限的角色列表)
1. AOP通知
在spring aop中有四种通知类型:before、after、throws和around。其中around通知可以选择是否执行方法调用,是否修改返回结果,是否抛出异常。spring security就是利用around对方法调用进行保护,利用filter对web请求进行保护。
在大多数应用中,我们只需要利用spring aop对service层的方法调用进行保护就可以了,因为这里是我们主要的业务实现的地方。倘若我们还需要直接对业务对象进行保护,那就需要考虑使用AspectJ来完成,另外AspectJ也可以实现对方法调用的保护。在实际应哟个中,我们可以根据需求选择,也可以选择两种、三种组合使用。当前的主流做法是利用filter来做web请求认证,结合着spring aop对service层的方法进行认证保护。
2.安全对象和AbstractSecurityInterceptor
在spring security中安全对象指的是需要有安全措施的对象,最常见的例子就是方法调用和web请求。
每一种安全对象类型都有其对应的继承了AbstractSecurityInterceptor的拦截器类。最重要的是,在AbstractSecurityInterceptor被调用的时候,如果用户已经认证过,SecurityContextHolder中肯定会包含一个有效的Authentication对象。
AbstractSecurityInterceptor拦截器一般的执行流程如下:
- a.查找和当前请求相关的配置属性-configuration attributes(如权限列表)
- b.传递Authentication对象、安全对象和配置属性给AccessDecisionManager的decide方法
- c.选择性的改变传入的Authentication对象
- d.放行对安全对象的调用(假设当前用户具有访问权限)
- e.如果配置了AfterInvocationManager,当decide方法结束时继续调用AfterInvocationManager,如果在decide方法内部抛出异常就不在调用
3.配置属性:Configuration Attributes
配置属性可以简单的认为是对AbstractSecurityInterceptor有特殊含义的字符串,在spring security中用ConfigAttribute类来表示。根据AccessDecisionManager的具体实现,这个属性即可以是一个简单角色名称,也可以包含特定意义。在AbstractSecurityInterceptor中有一个securityMetadataSource属性,用来查找当前被访问对象对应的配置属性,AbstractSecurityInterceptor的具体实现类的SecurityMetadataSource属性也不相同,FilterSecurityInterceptor中用FilterInvocationSecurityMetadataSource来表示这些安全属性,MethodSecurityInterceptor用MethodSecurityMetadataSource来表示,对应的设置方式也不相同,FilterInvocationSecurityMetadataSource通过uris来设置,MethodSecurityMetadataSource通过方法上的注解来设置
antMatchers("/admin/**").hasRole("ADMIN")
代表着url: /admin/**对应的配置属性为ADMIN,在实际运行时,这代表着任何用户拥有ADMIN角色的权限就可以访问/admin/**这个url。因此严格来说,配置属性仅仅是一些普通的属性,具体这些属性如何解析是取决于AccessDecisionManager的实现类的,在后续章节中我们会继续探讨AccessDecisionManager是如何实现的。
发表评论
-
spring-security(二十五)鉴权
2018-03-27 11:21 1599前言 本文将详细探讨spring security中的鉴权 ... -
test
2018-03-19 21:20 0什么是服务发现 ... -
spring-security(二十四)CSRF
2018-03-24 09:54 81581.什么是CSRF攻击 下面我们以一个具体的例子来说明这种常见 ... -
spring-security(二十三)Remember-Me认证
2018-03-09 21:06 1340前言: Remember-me认证方式指的是能在不同的会话 ... -
spring-security(二十二)基本认证和摘要认证
2018-03-06 16:58 1801前言: 在web应用中,非常流行以基本认证和摘要认证作为备 ... -
spring-security(二十一)核心Filter-UsernamePasswordAuthenticationFilter
2018-03-04 11:05 1236一、UsernamePasswordAuthenticatio ... -
spring-security(二十)核心Filter-SecurityContextPersistenceFilter
2018-02-28 21:40 1130一、SecurityContextPersistenceFil ... -
spring-security(十九)核心Filter-ExceptionTranslationFilter
2018-02-27 16:31 2059前言: 在spring的安全 ... -
spring-security(十八)核心Filter-FilterSecurityInterceptor
2018-02-25 10:59 2343前言: 当用spring secur ... -
spring-security(二十六)整合CAS 实现SSO
2018-04-05 18:09 12421.cas 认证流程 2.spring security ... -
spring-security(十七)Filter顺序及简介
2018-02-22 18:16 7900前言: spring security在 ... -
spring-security(十六)Filter配置原理
2018-02-21 15:18 2385前言: spring security最常见的应用场景还是 ... -
spring-security(十五) Password编码
2018-02-19 15:15 1224前言: 在实际应用中 ... -
spring-security(十四)UserDetailsService
2018-02-19 11:35 1470前言: 作为spring security的核心类,大多数 ... -
spring-security(十三)核心服务类
2018-02-18 16:46 1411前言: 在之前的篇章中我们已经讲述了spring secu ... -
spring-security(十一)Web应用认证过程
2018-02-17 17:17 1237前言: 本文将探讨当 ... -
spring-security(十)基本认证过程
2018-02-17 13:55 2106前言: 在spring security中认证具体指的是什 ... -
spring-security(九)-核心组件
2018-02-17 10:46 867前言: 本文主要介绍在spring security中的几 ... -
spring-security(八)java config-sample之cas client
2018-02-16 11:26 2067前言: SSO英文全称Single Sign On,单点登 ... -
spring-security(七)java config-sample之concurrency
2018-02-15 10:51 670前言: 在实际应用中,我们可能会限制一个用户同时登录同一个 ...
相关推荐
赠送jar包:spring-security-crypto-5.5.2.jar; 赠送原API文档:spring-security-crypto-5.5.2-javadoc.jar; 赠送源代码:spring-security-crypto-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-...
赠送jar包:spring-security-crypto-5.6.1.jar; 赠送原API文档:spring-security-crypto-5.6.1-javadoc.jar; 赠送源代码:spring-security-crypto-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-...
赠送jar包:spring-security-core-5.3.9.RELEASE.jar; 赠送原API文档:spring-security-core-5.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...
赠送jar包:spring-security-jwt-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-jwt-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-jwt-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-rsa-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-rsa-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-rsa-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-core-5.2.0.RELEASE.jar; 赠送原API文档:spring-security-core-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-core-5.5.2.jar; 赠送原API文档:spring-security-core-5.5.2-javadoc.jar; 赠送源代码:spring-security-core-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-core-5.0.7.RELEASE.jar; 赠送原API文档:spring-security-core-5.0.7.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.0.7.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-web-5.2.0.RELEASE.jar; 赠送原API文档:spring-security-web-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-security-web-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...
10. **spring-security-config-3.1.2.RELEASE.jar**:提供了基于XML或Java的配置方式,用于定义安全规则和策略,如定义访问控制列表,自定义过滤器链等。 通过以上这些jar包,我们可以深入研究Spring Security Web...
赠送jar包:spring-security-web-5.6.1.jar; 赠送原API文档:spring-security-web-5.6.1-javadoc.jar; 赠送源代码:spring-security-web-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-web-5.6.1....
赠送jar包:spring-security-oauth2-autoconfigure-2.1.8.RELEASE.jar; 赠送原API文档:spring-security-oauth2-autoconfigure-2.1.8.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-autoconfigure-...
赠送jar包:spring-security-config-5.0.7.RELEASE.jar; 赠送原API文档:spring-security-config-5.0.7.RELEASE-javadoc.jar; 赠送源代码:spring-security-config-5.0.7.RELEASE-sources.jar; 赠送Maven依赖信息...
赠送jar包:spring-security-core-5.5.2.jar; 赠送原API文档:spring-security-core-5.5.2-javadoc.jar; 赠送源代码:spring-security-core-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
1. **spring-security-core-2.0.5.RELEASE.jar**:这是Spring Security的核心库,包含了所有基本的安全处理类和接口。这个版本的发布解决了2.0.4版本中的已知问题,并可能包含一些性能优化和新功能。它包括了访问...
spring-boot-security-saml, Spring Security saml与 Spring Boot的集成 spring-boot-security-saml这个项目在处理 spring-security-saml 和 Spring Boot 之间的平滑集成的同时,在处理内部的配置的gritty和锅炉板的...
赠送jar包:spring-security-core-5.6.1.jar; 赠送原API文档:spring-security-core-5.6.1-javadoc.jar; 赠送源代码:spring-security-core-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-jwt-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-jwt-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-jwt-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...