生活随笔
收集整理的這篇文章主要介紹了
servlet 认证,授权
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/linshizhan/article/details/7792707
?servlet安全分為四類:認證,授權,數據完整性,機密性。
? ? ?有時候我們的某個網頁,可能不允許所有人查看,如有些機密消息只有高級會員查看,這時候我們該如何處理?我們怎么判斷訪問網頁的這個人就是本人,而不是其他人冒充的呢?
? ? servlet中的認證和授權就能解決這個問題,認證就是驗證是否是本人,驗證是否是本人的方法就是能否輸入正確的用戶名和密碼。授權就是用戶賬戶和密碼匹配后,查看該用戶的角色,是否有查看相關資源的權限。
? ? 在tomcat中conf文件夾下tomcat-users.xml中,我們可以定義角色 和相應賬戶的賬戶名,密碼,和角色信息。
? ?
[html] view plaincopyprint?
<tomcat-users>?????<role?rolename="member"/>?????<role?rolename="guest"/>?????<user?username="shizhan"?password="shizhan"?roles="member"/>?????<user?username="xxx"?password="xxx"?roles="guest"/>??</tomcat-users>??
<tomcat-users><role rolename="member"/><role rolename="guest"/><user username="shizhan" password="shizhan" roles="member"/><user username="xxx" password="xxx" roles="guest"/>
</tomcat-users>
?
? ?例如上面我們聲明了member和guest兩個角色。
? ?并且聲明了兩個用戶,shizhan和xxx,角色分別為member和guest。
? ?在web.xml中,我們可以通過?<security-role>把我們定義的角色告訴web應用。
? ?
[html] view plaincopyprint?
<security-role>??????<role-name>member</role-name>????</security-role>???????<security-role>???????<role-name>guest</role-name>???</security-role>??
<security-role><role-name>member</role-name></security-role><security-role><role-name>guest</role-name></security-role>
?
? ? 例如現在我們要對url為/TestSafeLogin的servlet進行認證和授權,可以這么聲明
? ? ?
[html] view plaincopyprint?
<security-constraint>????????<web-resource-collection>???????????<web-resource-name>demo</web-resource-name>???????????<url-pattern>/TestSafeLogin</url-pattern>???????????<http-method>GET</http-method>????????????<http-method>POST</http-method>????????</web-resource-collection>????????<auth-constraint>??????????<role-name>member</role-name>????????</auth-constraint>????????<user-data-constraint>????????????<transport-guarantee>CONFIDENTIAL</transport-guarantee>????????</user-data-constraint>????</security-constraint>??
<security-constraint><web-resource-collection><web-resource-name>demo</web-resource-name><url-pattern>/TestSafeLogin</url-pattern><http-method>GET</http-method><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>member</role-name></auth-constraint><user-data-constraint><transport-guarantee>CONFIDENTIAL</transport-guarantee></user-data-constraint></security-constraint>
?
? ??<web-resource-name>demo</web-resource-name>這個標簽沒有實質作用。
? ??<url-pattern>/TestSafeLogin</url-pattern>請求哪個servlet必須進行驗證。
? ???<http-method>GET</http-method> ?<http-method>POST</http-method>請求這個servlet的get和post請求才進行驗證。
? ?? ?<auth-constraint>
? ? ? ? ? ? ?<role-name>member</role-name>
? ? ? </auth-constraint> 表示只有會員這個角色才能查看。
? ? ?? <user-data-constraint>
? ? ? ? ? ? <transport-guarantee>CONFIDENTIAL</transport-guarantee>
? ? ? </user-data-constraint>表示傳輸用戶名和密碼的時候,利用https協議進行加密傳輸。
? ? 上面定義了只有會員的角色才能對/TestSafeLogin這個資源進行get和post請求,而且用戶名和密碼傳輸過程中使用https協議進行傳輸。
? ? 可是當我們訪問了這個資源后,容器利用什么方式要求用戶輸入用戶名和密碼呢?
? ? 這里有四種認證方式:
? ? 1:基本認證(采用base64編碼)
? ? 2:摘要(digest)認證
? ? 3:客戶證書(client-cert)是以一種非常安全的形式進行傳輸登錄信息,使用了公共密鑰證書,缺點是客戶必須有證書才能登錄你的系統。
? ? 4:表單認證(form),可以根據合法的html建立登錄表單,四種認證中,表單認證是最不安全的。
? ? 下面我們以表單認證來演示我們的例子。在web.xml中配置
? ??
[html] view plaincopyprint?
<login-config>??????<auth-method>FORM</auth-method>??????<form-login-config>?????????<form-login-page>/login.html</form-login-page>?????????<form-error-page>/loginerror.html</form-error-page>??????</form-login-config>??</login-config>??
<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/login.html</form-login-page><form-error-page>/loginerror.html</form-error-page></form-login-config></login-config>
? 表示需要客戶輸入用戶名和密碼的時候,跳轉到login.html,當輸入錯誤的時候跳轉到loginerror.html,并且以表單的方式提交。
? ?下面看看login.html
? ?
[html] view plaincopyprint?
<!DOCTYPE?html>??<html>????<head>??????<title>login.html</title>????</head>????????<body>??????????????<form?method="post"?action="j_security_check">??????????????????????用戶名<input?type="text"??name="j_username"/><br/>??????????????????????密碼??<input?type="text"??name="j_password"/><br/>????????????<input?type="submit"?value="登錄"/>???????</form>????</body>??</html>??
<!DOCTYPE html>
<html><head><title>login.html</title></head><body><form method="post" action="j_security_check">用戶名<input type="text" name="j_username"/><br/>密碼 <input type="text" name="j_password"/><br/><input type="submit" value="登錄"/></form></body>
</html>
?
? ?其中action的值等于j_security_check,用戶名的name是j_username,密碼的name是j_password,這些都是規定好的,不可改變。
? ?既然表單認證是最不安全的,那么怎么保證我們的信息傳輸的安全性呢?
? ?其實java ee規范中有傳輸層的安全性規范,我們可以使用
? ? ?<user-data-constraint>
? ? ? ? ? ? <transport-guarantee>CONFIDENTIAL</transport-guarantee>
? ? ? </user-data-constraint>來進行配置,上面我們已經配置過了,他使用的是ssl協議進行加密。
? ?現在一切都準備好了,我們還必須對tomcat配置ssl協議,其實就是為我們的服務器生成一個證書,大家可以參考網上的資料。
? 完畢。
?
總結
以上是生活随笔為你收集整理的servlet 认证,授权的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。