Spring Acegi Security是spring security的主要架构。
在这里需要理解4个filter的概念:AuthenticationProcessingFilter, HttpSessionContextIntegrationFilter, ExceptonTranslationFilter, FilterSecurityInterceptor.
这四个Filter被FilterChainProxy过滤器链管理,就像一个串把四个过滤器链接在一起,他实现了Filter接口,通过调用WebapplicationContextUtils类的getWebApplicationContext(ServletContext)来获取Spring上下文句柄,并通过getBean(beanName)方法获取Spring受管Bean的对象,即这里的target参数配置的Bean,并通过调用FilterChainProxy的init()方法来启动Spring Security过滤器链来进行各种身份认证和授权服务
web.xml可以用如下配置:
<filter>
<filter-name>filterChainProxy</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>filterChainProxy<filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如下为Spring-security.xml的示例代码:
<bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
<security:filter-chain-map path-type="ant">
<security:filter-chain pattern="/logout.jsp" filters="logoutFilter" />
<security:filter-chain pattern="/**" filters="httpSessionContextIntegrationFilter,authenticationProcessingFilter,FilterSecurityInterceptor" />
</security:filter-chain-map>
</bean>
下面逐个介绍每个过滤器:
AuthenticationProcessingFilter是认证过程过滤器,我们使用它来处理表单认证,当接受到与filterProcessesUrl所定义相同的请求时它开始工作:
<bean id="authenticationProcessingFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager"></property>
<property name="filterProcessesUrl" value="/login"></property>
<property name="defaultTargetUrl" value="/error.jsp?error=1"></property>
<property name="authenticationFailureUrl" value="/index.jsp?error_code=1"></property>
</bean>
AuthenticationProcessingFilter调用authenticationManager来完成用户身份的认证,主要是Authenticate方法来认证,它使用Authentication(只包含用户名密码)作为参数,认证成功返回一个完整的Authentication对象(包含用户权限信息GrantedAuthority数组对象),最后会将Authentication对象存入SecurityContext中。
httpSessionContextIntegrationFilter是集成过滤器,在产生的HTTP会话中保持SecurityContext。这意味着这种认证机制只需要认证一次,接下来将通过HTTP request传递至filter chain中的下一个filter。
示例如下:
<bean id="sif"
class="org.springframework.security.context.HttpSessionContextIntegrationFilter">
<property name="allowSessionCreation" value="false"/>
</bean>
FilterSecurityInterceptor管理限制存取权限检查,并授权检查。它知道哪些资源是安全的,哪些角色访问它们。 FilterSecurityInterceptor使用AuthenticationManager和做工作的AccessDecisionManager
<bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<property name="accessDecisionManager" ref="accessDecisionManager"></property>
<property name="authenticationManager" ref="authenticationManager"></property>
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login=ROLE_connect
/success.jsp=ROLE_connect
</value>
</property>
</bean>
ExceptionTranslationFilter依赖FilterSecurityInterceptor,用来捕获FilterSecurityInterceptor抛出的例外
<bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="authenticationEntryPoint"/>
<property name="accessDeniedHandler" ref="accessDeniedHandler"/>
</bean>
<bean id="authenticationEntryPoint" class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint">
</bean>
<bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/logout.html"/>
</bean>
分享到:
相关推荐
关于SpringSecurity与OAuth的学习,含mysql与redis版本
Spring Security 演讲PPT(演讲嘉宾:张明星) WebSphere技术专家沙龙在广州圆满举办,WSC超级版主Fastzch(张明星)担任本次沙龙的演讲嘉宾,他给广州的WebSphere技术专家带来了以“Spring Security ”为主题的...
Spring Security三份资料,实战Spring Security 3.x.pdf;Spring Security 3.pdf;Spring Security使用手册.pdf
spring security spring security 中文文档
Spring Security in Action
springsecurity是一个功能强大且高度可定制的身份验证和访问控制框架。springsecurity是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring安全性的真正威力在于它可以很容易地扩展以...
很多独立软件供应商,因为灵活的身份验证模式二选择Spring Security。这样做允许他们快速的集成到他们的终端客户需求的解决方案而不用进行大量工程或者改变客户的环境。如果上面的验证机制不符合你的需求,Spring ...
spring security2.5 jar 和spring security2.5 整合必须的jar包
该资源是基本Spring Security实战七篇文档中组织的源码,详情如下: ssecurity项目是Spring Security实战(一和二)的源码; ssecurity-db项目是Spring Security实战(三)的源码; ssceurity-page项目是Spring ...
Spring Security 3.pdf Spring Security 3.pdf Spring Security 3.pdf Spring Security 3.pdf
SpringSecurity框架的权限认证流程原理,请求到来时SpringSecurity如果调用层层过滤器来完成认证;
三更springsecurity学习笔记
Spring Security。 官网 Spring Security API(Spring Security 开发文档).CHM
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
SpringSecurity学习总结源代码
spring security3 中文版本
1.本项目为SpringCloud Gateway的微服务框架,整合了SpringSecurity,微服务间使用Redis来获取登陆的用户信息。 2.由于Gat
SpringSecurity入门到进阶到高级,是我们老师给我们讲课用的,我们都照着配就没有问题,可以跑通,
教程视频:spring提供的安全权限框架,Spring Security、Spring Social 、Spring Security OAuth
SpringSecurity课程文档下载 pdf 教学