传智播客佟刚spring-security.ppt

上传人:xt****7 文档编号:5182464 上传时间:2020-01-22 格式:PPT 页数:50 大小:506.50KB
返回 下载 相关 举报
传智播客佟刚spring-security.ppt_第1页
第1页 / 共50页
传智播客佟刚spring-security.ppt_第2页
第2页 / 共50页
传智播客佟刚spring-security.ppt_第3页
第3页 / 共50页
点击查看更多>>
资源描述
北京传智播客教育 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 5 dist spring 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使用org springframework security providers 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获取用户的权限信息 然后从objectDefinitionSource中获取URL所对应的权限 最后调用accessDecisionManager 访问决策管理器 来判断用户当前拥有的权限是否与当前受保护的URL资源对应的权限匹配 如果匹配就可以访问该URL资源 否则将抛出AccessDeniedException异常并返回客户端浏览器一个403错误 如果定义了accessDenied页面则会被重定向到该页面 北京传智播客教育 HelloWorld程序的运行流程 权限判断 2 org springframework security AccessDecisionManager接口定义了用于验证用户是否有权限访问受保护资源的decide方法 另一个supports方法根据受保护资源的配置属性 即访问这些资源所需的权限 来判断该访问决策管理器是否能做出针对该资源的访问决策 decide方法最终决定用户有无访问权限 如果没有则抛AccessDeniedException异常 与认证管理器类似 访问决策管理器也不是由自己来实现访问控制的 而是通过一组投票者来投票决定 通过调用投票者的vote方法 访问决策管理器统计投票结果并最终完成决策工作 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育 北京传智播客教育
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!