传智播客佟刚spring-security.ppt_第1页
传智播客佟刚spring-security.ppt_第2页
传智播客佟刚spring-security.ppt_第3页
传智播客佟刚spring-security.ppt_第4页
传智播客佟刚spring-security.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京传智播客教育,SpringSecutity,佟刚simpleit,北京传智播客教育,简介,SpringSecurity是SpringFramework的一个子项目.之前也叫做AcegiSecruty.SpringSecurity能用于保护各种Java应用程序(权限管理框架).但在基于Web的应用程序中使用得最为广泛.SpringSecurity能以声明的方式来保护Web应用程序的URL访问.只需简单的配置即可实现.SpringSecurity通过一系列Servlet过滤器为Web应用程序提供了多种安全服务.SpringSecurity2.x显著简化了配置,使用基于XMLSchema和基于注解的配置.,北京传智播客教育,HelloWorld-需求,Spring-security应用的根目录下有两个Jsp页面:index.jsp和admin.jsp.admin用户有权限访问这两个页面,而user用户只能访问index.jsp提供”登出”功能,admin(密码也为admin)用户,user(密码也为user)用户,北京传智播客教育,HelloWorld-搭建环境,在Spring的Web应用中添加spring-security-2.0.5distspring-security-core-2.0.5.RELEASE.jar,北京传智播客教育,HelloWorld-配置web.xml文件,在web.xml文件里配置DelegatingFilterProxy:将HTTP请求委托给Spring应用程序上下文中的一个Bean.被委托的Bean实现了javax.servlet.Fitler接口,但它需要受SpringIOC容器管理,而不是直接在web.xml中配置*.默认情况下,DelegatingFilterProxy会把HTTP请求委托给和它的属性相同的Bean上(也可以在targetBeanName初始参数中覆盖该Bean的名字).SpringSecurity在web服务器加载当前web应用时配置一个名称为springSecurityFilterChain的过滤器链(SpringSecurity即通过该过滤器链为web应用提供安全服务),所以应该使用这个名字.,北京传智播客教育,HelloWorld-配置applicationContext-security.xml文件,虽然可以在web层和服务层的配置文件中配置SpringSecurity,但还是最好将安全配置单独放到一个文件中去.需要将文件的位置加到contextConfigLocation参数中,以便ContextLoaderListener可以在启动时加载它*.可以把security定义为默认的命名空间,这样可以省略security前缀.,北京传智播客教育,HelloWorld-配置applicationContext-security.xml文件,北京传智播客教育,HelloWorld-配置applicationContext-security.xml文件详解(1),元素自动配置好了典型web应用程序所需的基本安全服务:基于表单的登录服务:为用户提供了用于登入应用程序,包含登录表单的页面.登出服务:提供了让用户能够登出应用程序的处理程序,这个程序被映射为响应的URL匿名登录:为匿名用户分配一个安全主题并授权,这样可以像普通用户一样来处理匿名用户.“记住我”支持:能在多个浏览器会话中记住用户的身份,通常是在用户的浏览器中保存Cookie.ServletAPI集成:可以通过类似HttpServletRequest.isUserInRole()和HttpServletRequest.getUserPrincipal()这样的标准API在web应用程序中访问安全信息.,北京传智播客教育,HelloWorld-配置applicationContext-security.xml文件详解(2),配置元素中,可以通过一个或多个元素来限制对特定URL的访问.每个元素指定了URL模式以及访问这些URL所必须的访问属性.在URL模式后总是要带上一个匹配符(*),否则这个URL模式无法匹配带有参数的URL.在实际使用中,SpringSecurity采用的是一种就近原则,当用户访问的url资源满足多个intercepter-url时,系统将使用第一个符合条件的intercept-url进行权限控制access指定的权限部分,这些权限标示符都是以ROLE_开头的,这与SpringSecurity中的Voter机制有着直接的联系,只有包含了特定前缀的字符串才会被SpringSecurity处理.,北京传智播客教育,HelloWorld-配置applicationContext-security.xml文件详解(3),在元素中配置身份验证服务.SpringSecurity支持多种用户身份验证方式,包括根据数据库进行验证或直接在中定义用户信息:Authorities属性定义了当前用户登陆之后将会拥有的权限,与intercept-url中定义的权限内容一一对应.每个用户可以同时拥有多个权限.,北京传智播客教育,登出服务,登出服务提供了一个处理程序来处理登出请求,可以通过的子节点进行配置.默认被映射到/j_spring_security_logout,所以可以添加一个指向该URL的链接提供登出功能.该URL可以通过的logout-url属性进行自定义.默认情况下,成功登出后用户会被重定向到上下文路径的根目录上.可以通过修改logout-success-url来进行自定义.,北京传智播客教育,基于表单的登录,Spring提供了包含登录表单的默认页面,同时允许用户自定义页面来充当登陆页面.可以通过的子节点配置基于表单的登录.默认情况下,SpringSecurity会自动创建登录页面并将它映射到/spring_security_login上.可以通过修改的login-page属性来修改该映射路径.若用户直接通过URL请求登录页面,默认情况下在登录成功后会被转发到web应用的根目录上.可以通过修改default-target-url属性来修改登录成功后的转发页面若用户直接通过URL请求登录页面,默认情况下在登录失败时会再次呈现带有错误信息的登录页面.可以通过修改authentication-failure-url属性来修改登录失败后的转发页面.,北京传智播客教育,处理视图,SpringSecurity提供了JSP标签库来帮助程序员在JSP视图中处理安全问题.这些标签可以显示用户的验证信息,也可以根据用户权限有条件地呈现视图内容.为了使用SpringSecurity标签库,需要将spring-security-taglibs-2.0.5.RELEASE.jar复制到到WEB-INF/lib目录下.标签提供了当前用户的Authentication对象,在property属性中可以指定属性名称.可以通过name属性指定用户的名称,authorities指定用户的权限.标签可以根据用户的权限有条件的呈现视图内容.ifAllGranted:由逗号分隔的权限列表,用户必须拥有所有列出的权限才能显示标签体内容ifAnyGranted:用户必须至少拥有其中的一个就可以显示标签体内容ifNotGranted:用户必须不拥有其中的任何一个就可以显示标签体内容。,北京传智播客教育,SpringSecurity的架构,要对Web资源进行保护,最好的办法莫过于Filter,SpringSecurity对Web资源的保护,就是靠Filter实现的,web资源,Filter,HTTP请求,HTTP相应,北京传智播客教育,SpringSecurity的架构,一般来说,Filter应该配置在web.xml中,但SpringSecurity在web.xml中配置的只是一个代理(DeletegatingFilterProxy)这些过滤器中的每一个都必须被注入来自Spring应用程序上下文的其他Bean.但Servlet规范并没有使得Servlet过滤器上的依赖注入容易进行.DeletegatingFilterProxy通过充当Spring应用程序中被配置为Bean的实际过滤器的“挂名人物”来解决这个问题.真正起作用的Filter是Spring上下文中的那些FilterBean.web.xml中的代理依次调用这些Bean,实现对Web资源的保护.,北京传智播客教育,SpringSecurity中的Filter,北京传智播客教育,SpringSecurity中的Filter,北京传智播客教育,HttpSessionContextIntegrationFilter,位于过滤器顶端,第一个起作用功能一:在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了.如果存在,就把SecurityContext拿出来,放到SecurityContextHolder中,供SpringSecurity的其他部分使用.如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中,供SpringSecurity的其他部分使用功能二:在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响,北京传智播客教育,LogoutFilter,只处理注销请求,默认为/j_spring_security_logout用途:在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,然后重定向到注销成功页面.若与rememberMe之类的机制结合,在注销的同时清空用户cookie,北京传智播客教育,AuthenticationProcessingFilter,处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的.默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面,北京传智播客教育,RememberMeProcessingFilter,此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限,北京传智播客教育,ExceptionTranslationFilter,此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码.,北京传智播客教育,FilterSecurityInterceptor,用户的权限控制都包含在这个过滤器中功能一:如果用户尚未登陆,则抛出AuthenticationCredentialsNotFoundException异常功能二:如果用户已登录,但是没有访问当前资源的权限,则抛出AccessDeniedException“功能三:如果用户已登录,也具有访问当前资源的权限,则放行,北京传智播客教育,HelloWorld程序的运行流程-登录(1),SpringSecurity使用认证过程过滤器(AuthenticationProcessingFilter)来处理表单认证,当接受到与filterProcessesUrl(默认值为:/j_spring_security_check)所定义相同的请求时它开始工作AuthenticationProcessingFilter调用AuthenticationManager(认证管理器)以确认用户的身份是否合法.org.springframework.security.AuthenticationManager接口定义了一个authenticate方法,它使用Authentication作为入口参数(只包含用户名和密码),并在验证成功后返回一个完整的Authentication对象(包含用户的权限信息GrantedAuthority数组对象)如果认证失败会抛出一个跳转到authenticationFailureUrl定义的URLSpringSecurity使用viders.ProviderManager(提供者管理器)类作为AuthenticationManager(认证管理器)的一个实现,该类是继承自实现了AuthenticationManager接口的AbstractAuthenticationManager类.ProviderManager(提供者管理器)自己并不实现身份验证,而是把这项工作交给了多个认证提供者(提供者集合),北京传智播客教育,HelloWorld程序的运行流程-登录(2),providers属性定义了提供者管理器的集合,ProviderManager逐一遍历这个认证提供者的集合并调用提供者的authenticate方法,如果一个提供者认证失败会尝试另外一个提供者直到某一个认证提供者能够成功的验证该用户的身份,以保证获取不同来源的身份认证认证提供者(例如:DaoAuthenticationProvider)从Authentication中得到带认证的用户名,然后调用UserDetailsService对象的loadUserByUsername方法通过用户名来获取代表一个应用系统的用户UserDetails对象.紧接着比较Authentication和UserDetails的匹配关系(密码是否匹配).若两者匹配,认证成功,将UserDetails的权限信息复制到Authentication中;若不匹配,认证失败.程序员可以自定义UserDetailsService接口的实现类,将该类配置到Spring的IOC容器中.然后在节点的user-service-ref属性中引用该Bean.即可定制自定义的登录实现,北京传智播客教育,HelloWorld程序的运行流程-登录(3),AuthenticationProcessingFilter,AuthenticationManager,AuthenticationProvider,UserDetailsService,loadUserByUsername()方法,北京传智播客教育,HelloWorld程序的运行流程-权限判断(1),FilterSecurityInterceptor(过滤器安全拦截器),该过滤器首先调用认证管理器来判断用户是否已被成功验证,如果没有被验证则重定向到登录界面.若已经通过验证,从Authentication获取用户的权限信息,然后从objectDefinitio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论