JEE6在web容器的安全以及Java应用程序开发中的认证和受权方面引入了一些新的安全特性。这些特性在Web层引入了编程式和声明式的安全加强。html 基于Servlet 3.0规范(JSR 315),Java EE 6 Web应用程序能够利用新的编程式和声明式的安全特性,以及此前在EJB 3.x就已引入的安全注解。Web应用程序还可使用基于JSR 196的插件式的认证/受权模块,这些模块能够做为Servlet容器的一部分。java Web模块安全Web模块安全的实现包括编程式(使用Http Servlet Request中新加入的安全方法)和声明式(使用新的安全注解)。web 编程式安全可使用HTTP Servlet Request中新加入的方法以编程的方式访问容器上下文。Servlet 3.0规范在HttpServletRequest接口中定义了以下方法,这些方法能够在Web应用中认证用户的身份。编程
HttpServletRequest接口的以下方法也能够访问组件调用者的安全信息:api
声明式安全新的注解也能够用来加强Web模块的安全性。咱们能够经过Java EE 6提供的注解和部署描述符进行认证、受权及传输层加密。Java EE 6的新注解列举以下:数组
若是Web应用程序由Servlet组成,在@ServletSecurity注解的内部使用@HttpConstraint注解和@HttpMethodConstraint注解(在某些状况下)来规定应用程序的安全约束便可。对于其余的Web应用程序,请在部署描述符里面使用security-constraint元素来规定应用程序的安全约束。安全 声明安全角色安全角色(security role)的名称可使用部署描述符的security-role元素来声明。安全角色引用(security role reference)定义了Web组件在调用isUserInRole(String role)方法时须要使用的角色名称与针对应用程序定义的安全角色名称之间的映射。例如,要把安全角色引用“cut”与角色名称为“bankCustomer”的安全角色映射起来,语法以下:oracle <servlet> ... <security-role-ref> <role-name>cust</role-name> <role-link>bankCustomer</role-link> </security-role-ref> ... </servlet> 若是属于“bankCustomer”安全角色的用户调用了该servlet,方法isUserInRole("cust")将返回true。security-role-ref元素中的role-link元素必须与在处于同一份web.xml部署描述符中的security-role元素所定义的role-name一致。java-ee <security-role> <role-name>bankCustomer</role-name> </security-role> 强制传输安全传输安全确保了没有人能够篡改服务端发到客户端或者从客户端接收的数据。Java EE规范让开发人员可以经过web.xml文件中的“用户数据约束(user data constraint)”和“传输保证(transport guarantee)”元素,或者@HttpConstraint注解的“transportGuarantee”属性,来强制传输的安全性。用户数据约束(user data constraint)知足了受限的请求应该经由受防御的传输层连接进行传输的需求。必需的防御力度是由传输保证(transport guarantee)元素的值来定义。如下是在内部类TransportGuarantee中定义的值:jsp
咱们能够经过使用“user-data-constraint"元素(这个元素应该放在包含了须要传输层保护的资源的security-constraint标签的内部),在web.xml中加上传输层的安全性。例如,咱们能够在security-constraint的内部加上以下代码片断,这样当用户访问受管资源时,将会被强制使用SSL。 <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> 欲了解更多关于Java EE 6的安全特性,不妨去看看Servlet 3.0规范文档中的“安全”章节(第13章)和Java EE 6教程( 第24章 )。 DZone最近也在Java EE加强的安全特性方面发表了一篇参考文档(reference card)(提示:用户须要先注册,才能从他们的网站下载文件)。 |