偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

配置Struts 2應(yīng)用程序的安全功能

開發(fā) 后端
安全性是Web應(yīng)用程序開發(fā)工作中最關(guān)鍵的問題之一。在基于servlet的應(yīng)用程序里,保護應(yīng)用程序資源的辦法有兩種:一是對應(yīng)用程序進行配置(web.xml),二是使用Java代碼硬編碼到程序中。

安全性是Web應(yīng)用程序開發(fā)工作中最關(guān)鍵的問題之一。在基于servlet的應(yīng)用程序里,保護應(yīng)用程序資源的辦法有兩種:一是對應(yīng)用程序進行配置(web.xml),二是使用Java代碼硬編碼到程序中。前一種方法使用配置文件,該方法很靈活,這是因為通過使用配置文件,無需改寫任何代碼就可以改變安全策略,是一種常見的手段。而Struts 2是基于servlet技術(shù)的,所以Struts 2的安全策略也可以使用配置文件進行靈活的配置。

配置安全策略時,有兩個概念需要清楚的區(qū)分 ,用戶和角色,簡單的說用戶為使用計算機的人,可以是個人或組織。角色是一個抽象的概念,泛指職務(wù)或者權(quán)限。例如,張三,李四,王五三個人,有職員、主管和經(jīng)理三個職務(wù)(權(quán)限),張三是用戶,張三可以是主管職務(wù),代表張三這個用戶含有主管的權(quán)利。

不同的servlet容器所提供的用戶和角色管理機制是不相同的。我使用的是Tomcat服務(wù)器,它提供的用戶和角色管理機制文件是在其安裝目錄下的conf目錄中的tomcat-users.xml文件,可以在這個文件里完成對用戶和角色的編輯。例如:

  1. <tomcat-users> 
  2.     <role rolename="tomcat"/> 
  3.     <role rolename="role1"/> 
  4.     <user username="tomcat" password="tomcat" roles="tomcat"/> 
  5.     <user username="both" password="tomcat" roles="tomcat,role1"/> 
  6.     <user username="role1" password="tomcat" roles="role1"/> 
  7. </tomcat-users> 

這個文件定義了2個角色(tomcat和role1)和3名用戶(tomcat、both和role1)。你可以在tomcat-users.xml文件里定義任意多個用戶和角色。

使用Struts 2保護應(yīng)用程序的資源

Struts 2應(yīng)用程序的安全策略是通過部署web.xml文件中的security-constraint元素實現(xiàn)的,該元素的語法定義:

  1. <!ELEMENT security-constraint (display-name?, web-resource-collection+, auth-constraint?, user-data-constraint?)>  
  2. <!ELEMENT display-name (#PCDATA)>  
  3. <!ELEMENT web-resource-collection (web-resource-name, description?, url-pattern*, http-method*)>  
  4. <!ELEMENT auth-constraint (description?, role-name*)>  
  5. <!ELEMENT user-data-constraint (description?, transport-guarantee)> 

該語法說明了,security-constraint元素可以有一個可選的display-name子元素,至少一個web-resource-collection子元素,一個可選的auth-constraint子元素和一個可選的user-data-constraint子元素。

web-resource-collection子元素是用來列出打算保護的Web資源,具體的做法是為這些資源設(shè)置URL限制,它是通過設(shè)置web-resource-collection元素包含的子元素實現(xiàn)的:

◆  web-resource-name:是與受保護資源相關(guān)聯(lián)的名稱。該子元素為必須元素。

◆  description:對給定資源的描述。這個子元素為可選元素。

◆  url-pattern:用來設(shè)置URL表達式,與這個URL表達式相匹配的URL地址指向的資源將受到保護。該子元素為至少有一個,為必須元素。

◆  http-method:用來表明哪些HTTP方法將受到限制,例如設(shè)置為GET那么所有的GET請求就將受到限制。該元素為可選元素。

auth-constraint元素用于指定可以訪問該資源用戶角色集合。如果沒有指定auth-constraint元素,就將安全約束應(yīng)用于所有角色。它包含下面幾個子元素:

◆  description:描述。該元素是可選元素。

◆  role-name:可以訪問保護資源的用戶角色。該元素可以有多個。

◆  user-data-constraint元素用來設(shè)置怎樣保護在客戶端和Web容器之間傳遞的數(shù)據(jù)。

◆  description: 描述??蛇x元素。

◆  transport-guarantee :該元素有以下幾個值

    1. NONE,這意味著應(yīng)用不需要傳輸保證。

    2. INTEGRAL,意味著服務(wù)器和客戶端之間的數(shù)據(jù)必須以某種方式發(fā)送,而且在傳送中數(shù)據(jù)不能被篡改。

    3. CONFIDENTIAL,這意味著傳輸?shù)臄?shù)據(jù)必須加密。

配置完畢security-constraint元素的基本信息,大致為下面的格式:

  1. <security-constraint> 
  2.     <web-resource-collection> 
  3.         <web-resource-name>Admin Arew</web-resource-name> 
  4.         <url-pattern>*.action</url-pattern> 
  5.     </web-resource-collection> 
  6.     <auth-constraint> 
  7.         <role-name>myeclipseWeb</role-name> 
  8.     </auth-constraint> 
  9. </security-constraint> 

這個security-constraint元素的效果為:只要與表達式"*.action"匹配的請求不是來自擁有"myeclipseWeb"權(quán)限的用戶,Web容器就會阻斷它。在這里還可以使用http-method元素,阻斷特定方法的請求,因為沒有使用會阻斷所有方法提交的請求。

設(shè)置完安全策略后,還需要設(shè)置讓用戶有機會提供證明,證明自己有權(quán)限訪問這個受限資源的登陸方法。允許使用的登陸方法使用login-config元素設(shè)置,下面為login-config元素的語法定義:

  1. <!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>  
  2. <!ELEMENT auth-method (#PCDATA)>  
  3. <!ELEMENT realm-name (#PCDATA)>  
  4. <!ELEMENT form-login-config (form-login-page, form-error-page)> 

login-config子元素的描述如下:
◆  auth-method指定用來驗證用戶身份的方法。它的值為下面的一個:BASIC、DIGEST、FORM或 CLIENT-CERT
◆  realm-name指定HTTP Basic驗證中在標準登陸框中顯示的一條提示。
◆  form-login-config元素是在<auth-method>元素值為"FORM"時使用的。它是指定基于表單的登錄中應(yīng)該使用的登錄頁面和出錯頁面。如果沒有使用基于表單的驗證,則忽略這些元素。這個元素的定義如下,其中form-login-page用于指定顯示登錄頁面的資源路徑, form-error-page則用于指定用戶登錄失敗時顯示出錯頁面的資源路徑。

  1. <!ELEMENT form-login-config (form-login-page, form-error-page)>  
  2. <!ELEMENT form-login-page (#PCDATA)>  
  3. <!ELEMENT form-error-page (#PCDATA)> 

設(shè)置完登陸方法后,還應(yīng)該使用security-role元素,注冊允許用來訪問受保護資源所有角色。在該元素內(nèi)部使用一個role-name子元素來注冊一個角色。例如:

  1. <security-role> 
  2.     <role-name>myeclipseWeb</role-name> 
  3. </security-role> 

注冊了一個"myeclipseWeb"的角色。

演示示例:使用BASIC登陸方法驗證用戶身份

1.我使用的Servlet容器是Tomcat,找到它的目錄下conf目錄中的tomcat-users.xml文件打開內(nèi)容如下:

  1. <?xml version='1.0' encoding='utf-8'?> 
  2. <tomcat-users> 
  3.     <role rolename="myeclipseWeb"/> 
  4.     <role rolename="myeclipseWebservices"/> 
  5.     <user username="webservices" password="webservices-pwd" roles="myeclipseWebservices"/> 
  6.     <user username="admin" password="admin-pwd" roles="myeclipseWeb,myeclipseWebservices"/> 
  7.     <user username="web" password="web-pwd" roles="myeclipseWeb"/> 
  8. </tomcat-users> 

我使用的IDE是myEclipse9.0,它配置好Tomcat下的tomcat-users.xml文件內(nèi)容如上,我直接使用它了,你也可以添加自己的角色和用戶。該文件定義了2個角色和3個用戶,每一個用戶都由自己的角色(或者說權(quán)限,可以有多重權(quán)限)。

2.創(chuàng)建Web項目,找到web.xml,配置它,使它支持Struts 2并且啟動Struts 2的安全策略

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app id="WebApp_9" version="2.4"  
  3.          xmlns="http://java.sun.com/xml/ns/j2ee"  
  4.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  6.     <display-name>Struts Blank</display-name> 
  7.     <filter> 
  8.         <filter-name>struts2</filter-name> 
  9.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
  10.     </filter> 
  11.     <filter-mapping> 
  12.         <filter-name>struts2</filter-name> 
  13.         <url-pattern>/*</url-pattern> 
  14.     </filter-mapping> 
  15.     <welcome-file-list> 
  16.         <welcome-file>index.html</welcome-file> 
  17.     </welcome-file-list> 
  18.     <!--  配置應(yīng)用程序需要保護的資源與什么角色才可以訪問它   --> 
  19.     <security-constraint> 
  20.         <web-resource-collection> 
  21.             <web-resource-name>Admin Arew</web-resource-name> 
  22.             <url-pattern>*.action</url-pattern> 
  23.         </web-resource-collection> 
  24.         <auth-constraint> 
  25.             <role-name>myeclipseWeb</role-name> 
  26.         </auth-constraint> 
  27.     </security-constraint> 
  28.     <!-- 注冊可以訪問保護資源的角色  --> 
  29.     <security-role> 
  30.         <role-name>myeclipseWeb</role-name> 
  31.     </security-role> 
  32.     <security-role> 
  33.         <role-name>myeclipseWebservices</role-name> 
  34.     </security-role> 
  35.     <!--  設(shè)置登錄方法  --> 
  36.     <login-config> 
  37.         <auth-method>BASIC</auth-method> 
  38.         <realm-name>User Basic Authentication</realm-name> 
  39.     </login-config> 
  40. </web-app> 

3. 創(chuàng)建接收一個字段信息的動作類:

  1. public class SecureAction extends ActionSupport { 
  2.     private static final long serialVersionUID = 1961430702313132722L; 
  3.     private String username; 
  4.     public String getUsername() { 
  5.         return username; 
  6.     } 
  7.     public void setUsername(String username) { 
  8.         this.username = username; 
  9.     } 
  10.     @Override 
  11.     public String execute() 
  12.     { 
  13.         return SUCCESS; 
  14.     } 

4. 創(chuàng)建struts.xml配置文件,聲明動作

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC 
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5. <struts> 
  6.     <package name="securePackage" extends="struts-default"> 
  7.         <action name="secure" class="struts2.action.SecureAction"> 
  8.             <result name="success">/index.jsp</result> 
  9.         </action> 
  10.     </package> 
  11. </struts> 

5. 創(chuàng)建輸入頁面input.jsp和結(jié)果頁面index.jsp

input.jsp:

  1. <body> 
  2.     <s:form action="secure"> 
  3.         <s:textfield name="username" label="Enter your name"></s:textfield> 
  4.         <s:submit value="submit"></s:submit> 
  5.     </s:form> 
  6. </body> 

index.jsp

  1. <body> 
  2.     <s:property value="username"/>,Welcome 
  3. </body> 

6.測試效果,在瀏覽器輸入:http://localhost:8081/SecureTest/input.jsp,得到如下界面:輸入"Tom",點擊"submit"按鈕,查看效果:

看到了登陸框了吧,此時我們要訪問的資源是一個受限資源所以要求權(quán)限驗證,還記得我們的用戶表吧,查看用戶表輸入用戶信息查看結(jié)果:

輸入"webservices"與"webservices-pwd"的用戶信息:

提示了一個"403"錯誤,這是因為雖然用戶信息正確,但是"webservices"用戶的沒有"myeclipseWeb"權(quán)限。

這次輸入一個不存在的用戶信息:

這次獲得了一個"401"錯誤,這是登陸失敗的提示結(jié)果,這里會因瀏覽器的不同而需要不同次數(shù)的失敗登陸才會得到這個結(jié)果。

接下來輸入一個正確的用戶,并且擁有"webservices"權(quán)限的用戶信息:

點擊"確定",獲得如下結(jié)果:

可以看到,我們成功的訪問了受保護的資源。若要傳中文字,解決方案我已經(jīng)在前面"配置Struts2"時介紹過了,需要修改Struts 2默認的編碼方式還需要修改頁面的編碼方式,都改為"GBK"。

原文鏈接:http://www.cnblogs.com/suxiaolei/archive/2011/11/02/2233601.html

【編輯推薦】

  1. Java中關(guān)于OOM的場景及解決方法
  2. Java NIO之選擇就緒模式
  3. Java代碼規(guī)范那些事
  4. Java效率真的很低嗎?Android為何要采用?
  5. 漫談Java開源5年:自由但帶著枷鎖

 

責(zé)任編輯:林師授 來源: 消逝の紙屑的博客
相關(guān)推薦

2023-12-13 13:10:02

2012-05-29 10:04:08

2009-02-27 17:00:25

2012-12-26 10:31:10

2018-09-30 15:58:34

2018-10-18 17:37:55

2020-10-14 15:05:02

React應(yīng)用程序

2010-02-26 11:08:29

Python應(yīng)用程序

2021-09-26 08:30:31

Python應(yīng)用程序代碼

2009-07-03 06:57:32

2020-08-25 14:03:20

應(yīng)用程序屏蔽應(yīng)用程序內(nèi)保護網(wǎng)絡(luò)攻擊

2009-06-02 16:05:04

Struts驅(qū)動開發(fā)

2012-12-11 10:35:39

MDM安全MDM

2010-10-08 11:49:35

2013-11-19 15:35:01

2011-11-03 09:41:35

Android簽名安全性

2023-10-27 12:11:33

2021-04-25 11:16:06

安全音頻社交媒體應(yīng)用程序

2015-01-20 09:11:19

2010-09-02 15:28:30

DHCP功能
點贊
收藏

51CTO技術(shù)棧公眾號