servlet 认证,授权
http://blog.csdn.net/linshizhan/article/details/7792707
?servlet安全分為四類:認(rèn)證,授權(quán),數(shù)據(jù)完整性,機(jī)密性。
? ? ?有時(shí)候我們的某個(gè)網(wǎng)頁(yè),可能不允許所有人查看,如有些機(jī)密消息只有高級(jí)會(huì)員查看,這時(shí)候我們?cè)撊绾翁幚?#xff1f;我們?cè)趺磁袛嘣L問網(wǎng)頁(yè)的這個(gè)人就是本人,而不是其他人冒充的呢?
? ? servlet中的認(rèn)證和授權(quán)就能解決這個(gè)問題,認(rèn)證就是驗(yàn)證是否是本人,驗(yàn)證是否是本人的方法就是能否輸入正確的用戶名和密碼。授權(quán)就是用戶賬戶和密碼匹配后,查看該用戶的角色,是否有查看相關(guān)資源的權(quán)限。
? ? 在tomcat中conf文件夾下tomcat-users.xml中,我們可以定義角色 和相應(yīng)賬戶的賬戶名,密碼,和角色信息。
? ?
[html] view plaincopyprint??
? ?例如上面我們聲明了member和guest兩個(gè)角色。
? ?并且聲明了兩個(gè)用戶,shizhan和xxx,角色分別為member和guest。
? ?在web.xml中,我們可以通過?<security-role>把我們定義的角色告訴web應(yīng)用。
? ?
[html] view plaincopyprint?
?
? ? 例如現(xiàn)在我們要對(duì)url為/TestSafeLogin的servlet進(jìn)行認(rèn)證和授權(quán),可以這么聲明
? ? ?
[html] view plaincopyprint?
?
? ??<web-resource-name>demo</web-resource-name>這個(gè)標(biāo)簽沒有實(shí)質(zhì)作用。
? ??<url-pattern>/TestSafeLogin</url-pattern>請(qǐng)求哪個(gè)servlet必須進(jìn)行驗(yàn)證。
? ???<http-method>GET</http-method> ?<http-method>POST</http-method>請(qǐng)求這個(gè)servlet的get和post請(qǐng)求才進(jìn)行驗(yàn)證。
? ?? ?<auth-constraint>
? ? ? ? ? ? ?<role-name>member</role-name>
? ? ? </auth-constraint> 表示只有會(huì)員這個(gè)角色才能查看。
? ? ?? <user-data-constraint>
? ? ? ? ? ? <transport-guarantee>CONFIDENTIAL</transport-guarantee>
? ? ? </user-data-constraint>表示傳輸用戶名和密碼的時(shí)候,利用https協(xié)議進(jìn)行加密傳輸。
? ? 上面定義了只有會(huì)員的角色才能對(duì)/TestSafeLogin這個(gè)資源進(jìn)行g(shù)et和post請(qǐng)求,而且用戶名和密碼傳輸過程中使用https協(xié)議進(jìn)行傳輸。
? ? 可是當(dāng)我們?cè)L問了這個(gè)資源后,容器利用什么方式要求用戶輸入用戶名和密碼呢?
? ? 這里有四種認(rèn)證方式:
? ? 1:基本認(rèn)證(采用base64編碼)
? ? 2:摘要(digest)認(rèn)證
? ? 3:客戶證書(client-cert)是以一種非常安全的形式進(jìn)行傳輸?shù)卿浶畔?#xff0c;使用了公共密鑰證書,缺點(diǎn)是客戶必須有證書才能登錄你的系統(tǒng)。
? ? 4:表單認(rèn)證(form),可以根據(jù)合法的html建立登錄表單,四種認(rèn)證中,表單認(rèn)證是最不安全的。
? ? 下面我們以表單認(rèn)證來演示我們的例子。在web.xml中配置
? ??
[html] view plaincopyprint?? 表示需要客戶輸入用戶名和密碼的時(shí)候,跳轉(zhuǎn)到login.html,當(dāng)輸入錯(cuò)誤的時(shí)候跳轉(zhuǎn)到loginerror.html,并且以表單的方式提交。
? ?下面看看login.html
? ?
[html] view plaincopyprint?
?
? ?其中action的值等于j_security_check,用戶名的name是j_username,密碼的name是j_password,這些都是規(guī)定好的,不可改變。
? ?既然表單認(rèn)證是最不安全的,那么怎么保證我們的信息傳輸?shù)陌踩阅?#xff1f;
? ?其實(shí)java ee規(guī)范中有傳輸層的安全性規(guī)范,我們可以使用
? ? ?<user-data-constraint>
? ? ? ? ? ? <transport-guarantee>CONFIDENTIAL</transport-guarantee>
? ? ? </user-data-constraint>來進(jìn)行配置,上面我們已經(jīng)配置過了,他使用的是ssl協(xié)議進(jìn)行加密。
? ?現(xiàn)在一切都準(zhǔn)備好了,我們還必須對(duì)tomcat配置ssl協(xié)議,其實(shí)就是為我們的服務(wù)器生成一個(gè)證書,大家可以參考網(wǎng)上的資料。
? 完畢。
?
總結(jié)
以上是生活随笔為你收集整理的servlet 认证,授权的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 的 AccessControl
- 下一篇: 安全cookie setSecure详解