先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但是我希望我下面的只言片语能够把它说清楚。大家都知道,如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Acegi对Web资源的保护,就是靠Filter实现的。如下图:
一般来说,我们的Filter都是配置在web.xml中,但是Acegi不一样,它在web.xml中配置的只是一个代理,而真正起作用的Filter是作为Bean配置在spring中的。web.xml中的代理依次调用这些Bean,就实现了对Web资源的保护,同时这些Filter作为Bean被Spring管理,所以实现AOP也很简单,真的是一举两得啊。
Acegi中提供的Filter不少,有十多个,一个一个学起来比较复杂。但是对于我们Web开发者来说,常用的就那么几个,如下图中的被红圈圈标记出来的:
从上到下,它们实现的功能依次是1、制定必须为https连接;2、从Session中提取用户的认证信息;3、退出登录;4、登录;5、记住用户;6、所有的应用必须配置这个Filter。
一般来说,我们写Web应用只需要熟悉这几个Filter就可以了,如果不需要https连接,连第一个也不用熟悉。但是有人肯定会想,这些Filter怎么和我的数据库联系起来呢?不用着急,这些Filter并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图:
对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务交给了Provider,而决策管理器则把任务交给了Voter,如下图:
现在我要告诉你们,这里的Provider和Voter也是不需要我们写代码的。不要崩溃,快到目标了。Acegi提供了多个Provider的实现类,如果我们想用数据库来储存用户的认证数据,那么我们就选择DaoAuthenticationProvider。对于Voter,我们一般选择RoleVoter就够用了,它会根据我们配置文件中的设置来决定是否允许某一个用户访问制定的Web资源。
而DaoAuthenticationProvider也是不直接操作数据库的,它把任务委托给了UserDetailService,如下图:
插入一些相关教程
2) httpSessionContextIntegrationFilter
每次request前 HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完后, 又把Authentication对象保存到Session中供下次request使用,此filter必须其他Acegi filter前使用,使之能跨越多个请求。
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
</bean>
3) basicProcessingFilter
用于处理HTTP头的认证信息,如从Spring远程协议(如Hessian和Burlap)或普通的浏览器如IE,Navigator的HTTP头中获取用户信息,将他们转交给通过authenticationManager属性装配的认证管理器。如果认证成功,会将一个Authentication对象放到会话中,否则,如果认证失败,会将控制转交给认证入口点(通过authenticationEntryPoint属性装配)
<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
4) basicProcessingFilterEntryPoint
通过向浏览器发送一个HTTP401(未授权)消息,提示用户登录。
处理基于HTTP的授权过程, 在当验证过程出现异常后的"去向",通常实现转向、在response里加入error信息等功能。
<bean id="basicProcessingFilterEntryPoint"
class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="Acegi First Realm Name" />
</bean>
其中,realmName属性取值并不存在太多的实际含义,运行时,”Acegi First Realm Name“字符串会显示在IE浏览器弹出的HTTP BASIC认证对话框中。
5) exceptionTranslationFilter
异常转换过滤器,主要是处理AccessDeniedException和AuthenticationException,将给每个异常找到合适的"去向"
<bean id="exceptionTranslationFilter"
class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
在此,如果认证不通过将会将控制转交给认证入口点(通过authenticationEntryPoint属性装配)
6) authenticationManager
起到认证管理的作用,它将验证的功能委托给多个Provider,并通过遍历Providers, 以保证获取不同来源的身份认证,若某个Provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的Authentication对象,否则会抛出一个AuthenticationException。
Acegi提供了不同的AuthenticationProvider的实现,如:
DaoAuthenticationProvider 从数据库中读取用户信息验证身份
AnonymousAuthenticationProvider 匿名用户身份认证
RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证
AuthByAdapterProvider 使用容器的适配器验证身份
CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登陆
JaasAuthenticationProvider 从JASS登陆配置中获取用户信息验证身份
RemoteAuthenticationProvider 根据远程服务验证用户身份
RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证
X509AuthenticationProvider 从X509认证中获取用户信息验证身份
TestingAuthenticationProvider 单元测试时使用
每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>
相关推荐
【标签】进一步巩固了我们的理解,"Security3,Security3项目,Security3安全"强调了这是关于Security3项目的安全相关工作。 【压缩包子文件的文件名称列表】包括两个文件: 1. **security.sql**:如前所述,这是一...
此外,`javaalmanac.chm`文件可能是一个包含Java编程相关知识的CHM(Compiled Help Manual)文件,它可能包含了关于Security Manager和权限更详细的解释和示例代码。CHM文件是一种微软编译的帮助文件格式,通常用于...
- **4.3 更多信息**:提供了更多关于 Spring Security 的资料和支持渠道。 #### 五、总结 Spring Security 作为一款成熟的安全框架,不仅提供了丰富的功能,而且具有良好的扩展性和易用性。通过上述介绍,我们了解...
在这个名为"狂神Spring Security静态资源"的资料中,我们可以期待学习到关于如何保护Web应用中的静态资源不被未经授权的用户访问。 首先,了解Spring Security的基本概念是必要的。它主要由四个组件构成:...
这个过程中,数据库起到了至关重要的作用,存储和管理了所有关于用户、角色和权限的信息。同时,理解并熟练掌握Spring Security的过滤器链、认证与授权机制,以及如何与Spring Boot整合,是实现这一目标的关键。
myeclipse security alert闪退方法是为myeclipse用户准备的,不少用户在破解后会提示security alert错误并且闪退,使用此方法可以解决闪退问题,需要的用户赶快来下载吧。
在演讲结束后,演讲嘉宾张明星还预留了时间进行现场问答,解答了观众关于Spring Security的实际应用和技术细节等问题。 ### 总结 通过这次演讲,我们可以看出Spring Security 2.x不仅在功能上强大,而且在灵活性和...
No Starch Press 出版的关于信息安全的书,内容比较全面 In this high-level survey of the information security field, best-selling author Jason Andress covers the basics of a wide variety of topics, from ...
- 文档:关于框架使用的文档和API参考。 理解Spring Security OAuth2的关键在于熟悉OAuth2的概念和流程,以及Spring Security OAuth2提供的组件和配置选项。通过阅读和分析`spring-security-oauth-master`中的源码...
Security + Guide to Network Security Fundamentals 很好的一本关于网络安全基础知识的书,我在国外上课的教材,很难找到
总的来说,"狂神spring-security静态资源.zip"可能是一份非常有价值的教程资料,涵盖了Spring Security的基础知识和实践技巧,特别是关于如何保护静态资源的示例。对于想要提升Spring Security技能的开发者来说,这...
7. **META-INF**:此目录下的文件通常包含关于应用的信息,如MANIFEST.MF文件,它包含了应用的元数据。 通过这个实例,我们可以深入理解Spring Security 3.1的配置、工作流程,以及如何在实际项目中实现用户认证、...
【标签】"helloworld spring security 入门" 提供了关于项目定位的关键信息。"Hello, World!"级别的项目通常是编程初学者的第一步,而“入门”则表明这适用于那些初次接触Spring Security的人。标签中的“spring ...
本手册是关于HAP框架中Spring Security的入门指南,由Chenxinkai在2016年7月13日创建,并于2016年7月24日进行了最后更新。该文档的参考编号为Hap框架 Spring Security 使用,版本号为1.0。本手册仅供内部使用,未经...
计算机安全界会议USENIX Security Symposium 2009年的会议论文集,关于该会议,可参考下面的介绍: USENIX Security:91分。USENIX是systems research方面的重要组织,主办了systems方面的若干重要会议,如OSDI...
"狂神说SpringSecurity静态资源.rar"很可能是狂神(一位知名的IT教育博主)分享的一系列关于SpringSecurity教程的资料,包含了模板(templates)和静态资源(static)两个部分。 在SpringSecurity中,静态资源的...
在IT行业中,Spring Security是一个广泛使用的安全框架,它为Java应用程序提供了全面的安全管理解决方案。本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。 首先,我们需要...
以下是一些关于SpringSecurity处理静态资源的关键知识点: 1. **静态资源路径配置**:在Spring Security配置类中,可以通过`WebSecurityConfigurerAdapter`的子类来配置静态资源的访问权限。例如,可以使用`...
关于“疑似jar包或其他文件缺失”的提示,确保你的项目包含了所有必要的Spring Security依赖。在Maven或Gradle的pom.xml或build.gradle文件中,检查`spring-security-core`、`spring-security-config`和`spring-...