Java EE 6应用程序安全增强.doc_第1页
Java EE 6应用程序安全增强.doc_第2页
Java EE 6应用程序安全增强.doc_第3页
Java EE 6应用程序安全增强.doc_第4页
全文预览已结束

下载本文档

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

文档简介

Java EE 6:应用程序安全增强作者 Srini Penchikala 译者 金明 发布于 2010年7月16日 上午6时49分 JEE6在web容器的安全以及Java应用程序开发中的认证和授权方面引入了一些新的安全特性。这些特性在Web层引入了编程式和声明式的安全增强。基于Servlet 3.0规范(JSR 315),Java EE 6 Web应用程序可以利用新的编程式和声明式的安全特性,以及此前在EJB 3.x就已引入的安全注解。Web应用程序还可以使用基于JSR 196的插件式的认证/授权模块,这些模块可以作为Servlet容器的一部分。Web模块安全Web模块安全的实现包括编程式(使用Http Servlet Request中新加入的安全方法)和声明式(使用新的安全注解)。编程式安全可以使用HTTP Servlet Request中新加入的方法以编程的方式访问容器上下文。Servlet 3.0规范在HttpServletRequest接口中定义了如下方法,这些方法可以在Web应用中认证用户的身份。 authenticate:这个方法使用ServletContext上配置的容器登录机制认证用户请求。此方法可以修改并提交HttpServletResponse。如果应用配置了基本类型的身份认证就会弹出一个登录对话框,收集用户名和密码并进行认证。 login:login方法在Web容器所使用的安全域(realm)中验证用户名和密码。应用程序可以使用该方法获取用户名和密码信息,这样除了在应用程序的部署描述符中指定基于表单的认证方式外,还可以编程的方式进行控制。 logout:Web应用程序可以使用该方法重置请求者的身份信息,如果在同一个请求中调用了getUserPrincipal、getRemoteUser和getAuthType等方法,那么它会将这些方法的返回值设为null。 HttpServletRequest接口的如下方法也可以访问组件调用者的安全信息: getRemoteUser:此方法可以获取客户端通过认证的用户名。此方法返回远程用户(已经由容器将其与请求关联在一起)的名字。如果没有用户通过身份认证,则返回null。 isUserInRole:此方法判定远程用户是否具有特定的安全角色。如果没有用户通过身份认证,则返回false。此方法接受一个用户角色名的字符串参数。应该在部署描述符中声明security-role-ref元素,其子元素role-name包含了传递给方法的角色名。 getUserPrincipal:getUserPrinicipal方法用来判断当前用户的principal名,并返回一个java.security.Principal对象。如果没有用户通过身份认证,则返回null。调用getUserPrincipal返回的Principal对象的getName方法会返回远程用户名。 声明式安全新的注解也可以用来增强Web模块的安全性。我们可以通过Java EE 6提供的注解和部署描述符进行认证、授权及传输层加密。Java EE 6的新注解列举如下: ServletSecurity:ServletSecurity可用于Servlet的实现类,指定Servlet容器对HTTP协议报文进行验证的安全约束。Servlet容器会对匹配的Servlet所对应的url-patterns施加这些约束。 HttpMethodConstraint:HttpMethodConstraint用在ServletSecurity注解的内部,表述了加于特定HTTP协议报文之上的安全约束。这是一个数组,指定了HTTP方法的具体约束。 HttpConstraint:该注解用在ServletSecurity注解的内部,表述了针对所有HTTP方法(除了在ServletSecurity注解的内部已经指定了对应的HttpMethodConstraint元素)进行防护的安全约束。 DeclareRoles:DeclareRoles是一个类级别的注解,这是Common Annotations 1.0(JSR 250)规范的一部分,它与定义应用程序所使用角色的security-role元素的效果相仿。它应该先于其他引用具体角色的地方进行定义。 RunAs:RunAs注解也是Commons Annotations 1.0的一部分,用来规定特殊组件的run-as角色。你可以规定是应该使用调用者的安全标识,还是应该使用一个特定的run-as标识来执行企业bean的特定方法。这个注解也是类级别的注解。 如果Web应用程序由Servlet组成,在ServletSecurity注解的内部使用HttpConstraint注解和HttpMethodConstraint注解(在某些情况下)来规定应用程序的安全约束即可。对于其他的Web应用程序,请在部署描述符里面使用security-constraint元素来规定应用程序的安全约束。声明安全角色安全角色(security role)的名称可以使用部署描述符的security-role元素来声明。安全角色引用(security role reference)定义了Web组件在调用isUserInRole(String role)方法时需要使用的角色名称与针对应用程序定义的安全角色名称之间的映射。例如,要把安全角色引用“cut”与角色名称为“bankCustomer”的安全角色映射起来,语法如下:. cust bankCustomer .如果属于“bankCustomer”安全角色的用户调用了该servlet,方法isUserInRole(cust)将返回true。security-role-ref元素中的role-link元素必须与在处于同一份web.xml部署描述符中的security-role元素所定义的role-name一致。 bankCustomer强制传输安全传输安全确保了没有人可以篡改服务端发到客户端或者从客户端接收的数据。Java EE规范让开发人员能够通过web.xml文件中的“用户数据约束(user data constraint)”和“传输保证(transport guarantee)”元素,或者HttpConstraint注解的“transportGuarantee”属性,来强制传输的安全性。用户数据约束(user data constraint)满足了受限的请求应该经由受防护的传输层链接进行传输的需求。必需的防护力度是由传输保证(transport guarantee)元素的值来定义。以下是在内部类TransportGuarantee中定义的值: CONFIDENTIAL:这个传输保证用于满足内容私密性的要求。它确保了数据是加密的,这样数据就无法被第三方破译。 NONE:这一级别的传输保证不使用SSL,允许数据照常传输。它表示容器在接收到任意的连接(包含未防护的连接)时,必须接受被约束的请求。 我们可以通过使用“user-data-constraint元素(这个元素应该放在包含了需要传输层保护的资源的security-constraint标签的内部),在web.xml中加上传输层的安全性。例如,我们可以在security-constraint的内部加上如下代码片段,这样当用户访问受管资源时,将会被强制使用SSL。 CONF

温馨提示

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

评论

0/150

提交评论