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)(提示:用戶須要先註冊,才能從他們的網站下載文件)。 |