多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > 第十四章_安全性

第十四章_安全性

來源:程序員人生   發(fā)布時(shí)間:2014-09-09 10:20:52 閱讀次數(shù):2148次

14.1、驗(yàn)證和授權(quán)

驗(yàn)證是檢驗(yàn)?zāi)硞€(gè)人是否是他/她所聲稱的那個(gè)人的過程。在Servlet/JSP應(yīng)用程序中,驗(yàn)證一般是通過要求用戶輸入用戶名和密碼來完成的。

授權(quán)主要是確定一個(gè)用戶具有什么樣的訪問級(jí)別。它使用于包含多個(gè)訪問區(qū)域的應(yīng)用程序,使用戶能夠訪問應(yīng)用程序的某一部分,但是不能訪問其他部分。例如,網(wǎng)上商店可以分為公共區(qū)(供一般的公共瀏覽和查找商品),買家區(qū)(供已注冊(cè)用戶下單用),以及需要最高訪問級(jí)別的管理區(qū)。不僅管理員用戶自身也需要進(jìn)行驗(yàn)證,并且還必須是已經(jīng)被允許訪問管理區(qū)的用戶才行。訪問級(jí)別經(jīng)常被稱作角色。

 

14.1.1、定義用戶和角色

每一種兼容的Servlet/JSP容器都必須提供一種定義用戶和角色的方法。如果你使用的是Tomcat,就可以通過編輯conf目錄下的tomcat-users.xml文件來創(chuàng)建用戶和角色。tomcat-users.xml文件范例如下:

<?xml version=’1.0’ encoding=’utf-8’?>

<tomcat-users>

<role rolename=”manager”/>

<role rolename=”member”/>

<user username=”tom” password=”secret” roles=”manager,member”/>

<user username=”jerry” password=”secret” roles=”member”/>

</tomcat-users>

tomcat-users.xml文件是一個(gè)帶有tomcat-users根源素的XML文檔。其中有roleuser元素。role元素定義角色,user元素定義用戶。role元素有一個(gè)rolename屬性,用來指定角色的名稱。user元素有usernamepasswordroles屬性。username屬性指定用戶名稱,password屬性指定密碼,roles屬性則指定該用戶所屬的一個(gè)或多個(gè)角色


14.1.2、強(qiáng)加安全性約束

前面講過,將靜態(tài)資源和JSP頁面保存在WEB-INF或其下的某一個(gè)目錄下,可以講他們隱藏起來。放在這里的資源無法直接通過輸入網(wǎng)址而訪問到,但是仍然可以通過一個(gè)Servlet或者JSP頁面跳轉(zhuǎn)到那里。雖然這種方法簡(jiǎn)單直接,但缺點(diǎn)是藏在這里的資源就永遠(yuǎn)被藏起來了。它們永遠(yuǎn)無法被直接訪問到。如果只是想避免未授權(quán)的用戶訪問這些資源,那么可以講它們放在應(yīng)用程序目錄下的某一個(gè)目錄中,并在部署描述符中聲明一個(gè)安全性約束。

security-constraint元素用于指定一個(gè)資源集合,以及可以訪問這些資源的一個(gè)或多個(gè)角色。這個(gè)元素可以有兩個(gè)子元素:web-resource-collectionauth-constraint

web-resource-collection元素用于指定一個(gè)資源集合,并且可以帶有以下元素:web-resource-namedescriptionurl-patternhttp-methodhttp-method-ommission

web-resource-collection元素可以帶有多個(gè)url-pattern元素,每一個(gè)子元素都表示所包含安全性約束實(shí)行的一種URL模式。我們可以在url-pattern元素中用一個(gè)星號(hào)(*)表示一種特定的資源類型(*.jsp),或者表示某個(gè)目錄下的所有資源(/*/jsp/*)。但是這兩種不能合二為一,比如,無法表示某一個(gè)特定目錄下的某一種特定的類型。因此,如果用/jsp/*.jsp表示jsp目錄下的所有jsp頁面,那么這個(gè)URL模式將是無效的,而是要用/jsp/*來表示,但是這樣又限制了jsp目錄下那些非jsp的頁面。

http-method元素中定義了一個(gè)HTTP方法,包含的安全性約束即應(yīng)用到該方法中。例如,web-resource-collection元素帶有一個(gè)GET http-method元素,表示web-resource-collection元素只應(yīng)用于HTTPget方法。包含資源集合的安全性約束并不能保護(hù)其他的HTTP方法,例如Post方法和Put方法。如果沒有http-method元素,表示這個(gè)安全性約束將會(huì)限制對(duì)所有HTTP方法的訪問。同一個(gè)web-resource-collection元素中可以帶有多個(gè)http-method元素。

http-method-omission元素指定的是不再所包含安全性約束中的HTTP方法。因此,指定<http-method-omission>GET</http-method-omission>限制了對(duì)除GET之外的所有HTTP方法的訪問。

http-methodhttp-method-omission元素不能同時(shí)出現(xiàn)在同一個(gè)web-resource-collection元素中。

部署描述符中可以有多個(gè)security-constraint元素。如果安全性約束元素中沒有auth-constraint元素,那么這個(gè)資源集合將不能受到保護(hù)。此外,如果你指定了一個(gè)沒有在容器中定義的角色,那么將沒有人能夠直接訪問這個(gè)資源集合。但是,你還是可以通過一個(gè)Servlet或者JSP頁面跳轉(zhuǎn)到集合中的某個(gè)資源。

舉個(gè)例子。下面的web.xml文件中的security-constraint元素限制了對(duì)所有jsp頁面的訪問。由于auth-constraint元素中沒有包含role-name元素,因此不能通過url來訪問這些資源。

 

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <security-constraint> <web-resource-collection> <web-resource-name>JSP pages</web-resource-name> <!-- 所有的jsp頁面都不能被訪問 --> <url-pattern>*.jsp</url-pattern> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint> </web-app>

現(xiàn)在,可以在瀏覽器中打開網(wǎng)址測(cè)試一下:

Servlet容器會(huì)發(fā)送一條HTTP403錯(cuò)誤,溫柔地告訴你:Access to the requested resource has been denied(禁止訪問)。


14.2、驗(yàn)證方法

學(xué)會(huì)如何對(duì)一個(gè)資源集合強(qiáng)加安全性約束之后,還應(yīng)該知道如何對(duì)訪問這些資源的用戶進(jìn)行驗(yàn)證。對(duì)于聲明式保護(hù)的資源,可以在部署描述符中使用security-constraint元素,通過使用HTTP 1.1提供的解決方案來完成驗(yàn)證:基本訪問驗(yàn)證和摘要訪問驗(yàn)證。此外,也可以使用基于表單的訪問驗(yàn)證。

 

14.2.1、基本訪問驗(yàn)證

基本訪問驗(yàn)證,簡(jiǎn)稱基本驗(yàn)證,是一種接受用戶名和密碼的HTTP驗(yàn)證。在基本訪問驗(yàn)證中,如果用戶訪問受保護(hù)的資源,將會(huì)遭到服務(wù)器的拒絕,并返回一個(gè)401(未授權(quán))響應(yīng)。該響應(yīng)中包含一個(gè)WWW-Authenticate標(biāo)頭,其中至少包含一個(gè)適用于被請(qǐng)求資源的角色,例如:

HTTP/1.1 401 Authorization Required

Server: Apache-Coyote/1.1

Date: Wed, 21 Dec 2011 11:32:09 GMT

WWW-Authenticate: Basic realm=”Members Only”

隨后瀏覽器屏幕上回顯示一個(gè)登錄對(duì)話框,供用戶輸入用戶名和密碼。當(dāng)用戶單擊Login登錄按鈕時(shí),用戶名后面會(huì)被添上一個(gè)冒號(hào),并和密碼結(jié)合在一起。這個(gè)字符串被送到服務(wù)器之前,將先用Base64算法進(jìn)行編碼。登錄成功之后,服務(wù)器就會(huì)發(fā)出被請(qǐng)求的資源。

Base64是一種很弱的算法,因此Base64消息很容易被破解。因此,要考慮使用摘要訪問來代替。

下面展示了如何使用基本訪問驗(yàn)證。第一個(gè)security-constraint元素是避免JSP頁面被直接訪問。第二個(gè)是限制只有managermember角色的用戶才能訪問Servlet1 ServletServlet1類是一個(gè)跳轉(zhuǎn)到1.jsp頁面的簡(jiǎn)單Servlet

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <security-constraint> <web-resource-collection> <web-resource-name>JSP pages</web-resource-name> <!-- 所有的jsp頁面都不能被訪問 --> <url-pattern>*.jsp</url-pattern> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Servlet1</web-resource-name> <url-pattern>/servlet1</url-pattern> </web-resource-collection> <auth-constraint> <role-name>member</role-name> <role-name>manager</role-name> </auth-constraint> </security-constraint> <login-config> <!-- BASIC必須全部大寫 --> <auth-method>BASIC</auth-method> <!-- 顯示在瀏覽器的登陸對(duì)話框中 --> <realm-name>Members Only</realm-name> </login-config> </web-app>

servlet1.java

package app11a.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns={"/servlet1"}) public class Servlet1 extends HttpServlet{ private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/1.jsp") ; dispatcher.forward(request, response); } }


由于映射到Servlet1的auth-constraint元素指定了manager和member兩種角色,因此通過tom或者jerry都可以登錄。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本午夜大片a在线观看 | 亚洲欧美久久精品一区 | 国产精品国产三级国产 | 国产午夜精品久久久久 | 色综合欧美亚洲另类久久 | 男女羞羞网站 | 欧美成人午夜在线全部免费 | 免费精品美女久久久久久久久久 | 久久久久国产精品 | 亚洲精品一区久久狠狠欧美 | 高清一级做a爱免费视 | 久久精品免费一区二区视 | 在线观看免费视频片 | 免费爱爱视频网站 | 国产午夜精品片一区二区三区 | 久久福利院 | 伊人亚洲影院 | 成人亚洲国产精品久久 | 午夜男人网 | 乡下女色又黄一级毛片 | 国产亚洲欧美久久精品 | 免费在线播放视频 | 青春草久久 | 老司机午夜性大片免费 | 国产一级做a爱免费视频 | 国产高清福利91成人 | 久久精品中文字幕极品 | 日本亚洲在线 | 色吊丝永久在线观看最新 | 成年人免费在线视频观看 | 日本午夜视频 | 中日韩一区二区三区 | 欧美日韩国产成人精品 | 亚洲xxx视频 | 美国美女毛片 | 久久精品亚洲综合 | 国内自拍偷拍 | 欧美日韩国产一区二区三区 | 国产第一页亚洲 | 日韩欧美视频一区二区在线观看 | 秋霞午夜视频 |