资源预览内容
第1页 / 共50页
第2页 / 共50页
第3页 / 共50页
第4页 / 共50页
第5页 / 共50页
第6页 / 共50页
第7页 / 共50页
第8页 / 共50页
第9页 / 共50页
第10页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
高级软件人才实作培训专家 !Spring Secutity佟 刚 simpleit163.comIT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! 简介lSpring Security 是 Spring Framework 的一个子项 目. 之前也叫做 Acegi Secruty.lSpring Security 能用于保护各种 Java 应用程序(权 限管理框架). 但在基于 Web 的应用程序中使用得最 为广泛. lSpring Security 能以声明的方式来保护 Web 应用程 序的 URL 访问. 只需简单的配置即可实现.lSpring Security 通过一系列 Servlet 过滤器为 Web 应用程序提供了多种安全服务. lSpring Security 2.x 显著简化了配置, 使用基于 XML Schema 和基于注解的配置.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! HelloWorld - 需求lSpring-security 应用的根目录下有两个 Jsp 页面: index.jsp 和 admin.jsp. admin 用户有权限访问这两个 页面, 而 user 用户只能访问 index.jspl提供”登出”功能admin(密码也为 admin) 用户user(密码也为 user) 用户IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! HelloWorld - 搭建环境l在 Spring 的 Web 应用中添加 spring-security- 2.0.5distspring-security-core-2.0.5.RELEASE.jarIT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! HelloWorld - 配置 web.xml 文件l在 web.xml 文件里配置 DelegatingFilterProxy: 将 HTTP 请求委托给 Spring 应用程序上下文中的一个 Bean . 被委 托的 Bean 实现了 javax.servlet.Fitler 接口, 但它需要受 Spring IOC 容器管理, 而不是直接在 web.xml 中配置*. 默认情况下, DelegatingFilterProxy 会把 HTTP 请求委托给和它的 属性相同的 Bean 上(也可以在 targetBeanName 初始 参数中覆盖该 Bean 的名字). SpringSecurity 在 web 服务器加载当前 web 应用时配置一个名称 为 springSecurityFilterChain 的过滤器链(SpringSecurity 即通过 该过滤器链为 web 应用提供安全服务), 所以 应该使 用这个名字.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 !HelloWorld - 配置 applicationContext- security.xml 文件l虽然可以在 web 层和服务层的配置文件中配置 Spring Security, 但还是最好将安全配置单独放到一个 文件中去. l需要将文件的位置加到 contextConfigLocation 参数中 , 以便 ContextLoaderListener 可以在启动时加载它*.l可以把 security 定义为默认的命名空间, 这样可以省 略 security 前缀. IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 !HelloWorld - 配置 applicationContext- security.xml 文件IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 !HelloWorld - 配置 applicationContext- security.xml 文件详解(1)l 元素自动配置好了典型 web 应用程序所需的基本安全服务: 基于表单的登录服务: 为用户提供了用于登入应用程序, 包含 登录表单的页面. 登出服务: 提供了让用户能够登出应用程序的处理程序, 这个 程序被映射为响应的 URL 匿名登录: 为匿名用户分配一个安全主题并授权, 这样可以像 普通用户一样来处理匿名用户. “记住我”支持: 能在多个浏览器会话中记住用户的身份, 通常 是在用户的浏览器中保存 Cookie. Servlet API 集成: 可以通过类似 HttpServletRequest.isUserInRole() 和 HttpServletRequest.getUserPrincipal() 这样的标准 API 在 web 应用程序中访问安全信息.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 !HelloWorld - 配置 applicationContext- security.xml 文件详解(2)l 配置元素中, 可以通过一个或多个 元 素来限制对特定 URL 的访问.l每个 元素指定了 URL 模式以及访问这些 URL 所必须的访问属性.l在 URL 模式后总是要带上一个匹配符(*), 否则这个 URL 模式 无法匹配带有参数的 URL. l在实际使用中, Spring Security采用的是一种就近原则, 当用 户访问的url资源满足多个intercepter-url时,系统将使用第一 个符合条件的intercept-url进行权限控制laccess指定的权限部分, 这些权限标示符都是以 ROLE_ 开头的, 这与Spring Security中的 Voter 机制有着直接的联系, 只有包 含了特定前缀的字符串才会被Spring Security处理. IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 !HelloWorld - 配置 applicationContext- security.xml 文件详解(3)l在 元素中配置身份验证服务 .lSpring Security 支持多种用户身份验证方式, 包括根据 数据库进行验证或直接在 中定义用户 信息: Authorities 属性定义了当前用户登陆之后将会拥有的权限,与 intercept-url 中定义的权限内容一一对应. 每个用户可以同时拥 有多个权限.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! 登出服务l登出服务提供了一个处理程序来处理登出请求, 可以 通过 的 子节点进行配置.l默认被映射到 /j_spring_security_logout, 所以可以 添加一个指向该 URL 的链接提供登出功能. 该 URL 可以通过 的 logout-url 属性进行自定义.l默认情况下, 成功登出后用户会被重定向到上下文路 径的根目录上. 可以通过修改 logout-success-url 来进 行自定义.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! 基于表单的登录lSpring 提供了包含登录表单的默认页面, 同时允许用户自定义页 面来充当登陆页面.l可以通过 的 子节点配置基于表单的登录.l默认情况下, Spring Security 会自动创建登录页面并将它映射到 /spring_security_login 上. 可以通过修改 的 login- page 属性来修改该映射路径.l若用户直接通过 URL 请求登录页面, 默认情况下在登录成功后会 被转发到 web 应用的根目录上. 可以通过修改 default-target-url 属性来修改登录成功后的转发页面l若用户直接通过 URL 请求登录页面, 默认情况下在登录失败时会 再次呈现带有错误信息的登录页面. 可以通过修改 authentication-failure-url 属性来修改登录失败后的转发页面.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! 处理视图lSpring Security 提供了 JSP 标签库来帮助程序员在 JSP 视图中处 理安全问题. 这些标签可以显示用户的验证信息, 也可以根据用户权 限有条件地呈现视图内容.l为了使用 Spring Security 标签库, 需要将 spring-security-taglibs- 2.0.5.RELEASE.jar 复制到到 WEB-INF/lib 目录下.l 标签提供了当前用户的 Authentication 对象, 在 property 属性中可以指定属性名称. 可以通过 name 属性指 定用户的名称, authorities 指定用户的权限.l 标签可以根据用户的权限有条件的呈现视图 内容. ifAllGranted: 由逗号分隔的权限列表,用户必须拥有所有列出的权限才 能显示标签体内容 ifAnyGranted: 用户必须至少拥有其中的一个就可以显示标签体内容 ifNotGranted: 用户必须不拥有其中的任何一个就可以显示标签体内容 。IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! Spring Security 的架构l要对Web资源进行保护, 最好的办法莫过于Filter, Spring Security 对Web资源的保护,就是靠Filter实 现的web 资源FilterHTTP 请求HTTP 相应IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! Spring Security 的架构l一般来说, Filter 应该配置在 web.xml 中, 但 Spring Security 在 web.xml 中配置的只是一个代理 (DeletegatingFilterProxy) 这些过滤器中的每一个都必须被注入来自 Spring 应用程序 上下文的其他 Bean. 但 Servlet 规范并没有使得 Servlet 过滤器上的依赖注入容易进行. DeletegatingFilterProxy 通过充当 Spring 应用程序中被配置为 Bean 的实际过滤器 的 “挂名人物” 来解决这个问题.l真正起作用的 Filter 是 Spring 上下文中的那些 Filter Bean. web.xml 中的代理依次调用这些Bean, 实现对Web资源的保护.IT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! Spring Security 中的 FilterIT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! Spring Security 中的 FilterIT资讯交流网 WWW.IT315.ORGwww.itcast.cn高级软件人才实作培训专家 ! HttpSessionContextIntegrationFilterl位于过滤器顶端, 第一个起作用l功能一: 在执行其他过滤器之前, 率 先判断用户的session中是否已经存在 一个 SecurityContext 了. 如果存在 ,就把 SecurityContext拿出来, 放 到SecurityContextHolder中, 供 Spring Security的其他部分使用. 如
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号