您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > SpringSecurity培训
SpringSecurity主讲:柴炎星2011-03-28流程介绍•SpringSecurity简介•SpringSecurity11种过滤器介绍•SpringSecurity基本配置•SpringSecurity总结SpringSecurity简介•这里提到的SpringSecurity也就是被大家广为熟悉的AcegiSecurity,2007年底AcegiSecurity正式成为SpringPortfolio项目,并更名为SpringSecurity。SpringSecurity是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了SpringIoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。•如今的SpringSecurity已经成为SpringFramework下最成熟的安全系统,它为我们提供了强大而灵活的企业级安全服务,如:•Ø认证授权机制•ØWeb资源访问控制•Ø业务方法调用访问控制•Ø领域对象访问控制AccessControlList(ACL)•Ø单点登录(CentralAuthenticationService)•ØX509认证•Ø信道安全(ChannelSecurity)管理等功能•当保护Web资源时,SpringSecurity使用Servlet过滤器来拦截Http请求进行身份验证并强制安全性,以确保WEB资源被安全的访问。•无论是保护WEB资源还是保护业务方法或者领域对象,SpringSecurity都是通过上图中的组件来完成的。本文主要阐述如何使用SpringSecurity对WEB应用程序的资源进行安全访问控制,并通过一个简单的实例来对SpringSecurity提供的各种过滤器的功能和配置方法进行描述。SpringSecurity11种过滤器介绍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登陆•后的提交地址。•此过滤器执行的基本操作时,通过用户名和•密码判断用户是否有效,如果登录成功就跳•转到成功页面(可能是登陆之前访问的受•保护页面,也可能是默认的成功页面),•如果登录失败,就跳转到失败页面。•formaction=${pageContext.request.contextPath}/j_spring_security_checkstyle=width:260px;text-align:center;fieldsetlegend登陆/legend用户:inputtype=textname=j_usernamestyle=width:150px;value=${sessionScope['SPRING_SECURITY_LAST_USERNAME']}/br/密码:inputtype=passwordname=j_passwordstyle=width:150px;/br/inputtype=checkboxname=_spring_security_remember_me/两周之内不必登陆br/inputtype=submitvalue=登陆/inputtype=resetvalue=重置//fieldset/form•/j_spring_security_check,提交登陆信息的URL地址。自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。j_username,输入登陆名的参数名称。j_password,输入密码的参数名称_spring_security_remember_me,选择是否允许自动登录的参数名称。可以直接把这个参数设置为一个checkbox,无需设置value,SpringSecurity会自行判断它是否被选中。DefaultLoginPageGeneratingFilter•此过滤器用来生成一个默认的登录页面,默认的访问地址为/spring_security_login,这个默认的登录页面虽然支持用户输入用户名,密码,也支持rememberMe功能,但是因为太难看了,只能是在演示时做个样子,不可能直接用在实际项目中。•自定义登陆页面•httpauto-config='true'intercept-urlpattern=/login.jspaccess=IS_AUTHENTICATED_ANONYMOUSLY/intercept-urlpattern=/admin.jspaccess=ROLE_ADMIN/intercept-urlpattern=/**access=ROLE_USER/form-loginlogin-page=/login.jspauthentication-failure-url=/login.jsp?error=truedefault-target-url=///httpBasicProcessingFilter•此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。•添加basic认证,去掉auto-config=true,并加上http-basic/•httpauto-config=truehttp-basic/intercept-urlpattern=/admin.jspaccess=ROLE_ADMIN/intercept-urlpattern=/access=ROLE_USER//httpSecurityContextHolderAwareRequestFilter•此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。比如getRemoteUser()时直接返回当前登陆的用户名之类的。ExceptionTranslationFilter•此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。RememberMeProcessingFilter•此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限。•在配置文件中使用auto-config=true就会自动启用rememberMe•实际上,SpringSecurity中的rememberMe是依赖cookie实现的,当用户在登录时选择使用rememberMe,系统就会在登录成功后将为用户生成一个唯一标识,并将这个标识保存进cookie中,我们可以通过浏览器查看用户电脑中的cookie。AnonymousProcessingFilter•为了保证操作统一性,当用户没有登陆时,默认为用户分配匿名用户的权限。•在配置文件中使用auto-config=true就会启用匿名登录功能。在启用匿名登录之后,如果我们希望允许未登录就可以访问一些资源,可以在进行如下配置。•httpauto-config='true'intercept-urlpattern=/access=IS_AUTHENTICATED_ANONYMOUSLY/intercept-urlpattern=/admin.jspaccess=ROLE_ADMIN/intercept-urlpattern=/**access=ROLE_USER//http•设置成ROLE_ANONYMOUS也可以。•httpauto-config='true'intercept-urlpattern=/filters=none/intercept-urlpattern=/admin.jspaccess=ROLE_ADMIN/intercept-urlpattern=/**access=ROLE_USER//http•filters=none表示当我们访问“/”时,是不会使用任何一个过滤器去处理这个请求的,它可以实现无需登录即可访问资源的效果,但是因为没有使用过滤器对请求进行处理,所以也无法利用安全过滤器为我们带来的好处,最简单的,这时SecurityContext内再没有保存任何一个权限主体了,我们也无法从中取得主体名称以及对应的权限信息。ExceptionTranslationFilter•此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。SessionFixationProtectionFilter•防御会话伪造攻击。•解决sessionfix的问题其实很简单,只要在用户登录成功之后,销毁用户的当前session,并重新生成一个session就可以了。•httpauto-config='true'session-fixation-protection=noneintercept-urlpattern=/admin.jspaccess=ROLE_ADMIN/intercept-urlpattern=/**access=ROLE_USER//http••session-fixation-protection的值共有三个可供选择,none,migrateSession和newSession。默认使用的是migrationSessionFilterSecurityInterceptor•用户的权限控制都包含在这个过滤器中。•功能一:如果用户尚未登陆,则抛出•AuthenticationCredentialsNotFoundException“•尚未认证异常”。•功能二:如果用户已登录,但是没有访问当前资源的权限,•则抛出AccessDeniedException“拒绝访问异常”。•功能三:如果用户已登录,也具有访问当前资源的权限,•则放行。•至此,我们完全展示了默认情况下SpringSecurity中使•用到的过滤器,以及每个过滤器的应用场景和显示•功能,下面我们会对•这些过滤器的配置和用法进行逐一介绍。SpringSecurity基本配置•最小化配置•1.在web.
本文标题:SpringSecurity培训
链接地址:https://www.777doc.com/doc-960499 .html