tomcat 禁用不安全的http請求模式 .


  HTTP服務器至少應該實現GET和HEAD方法,其他方法都是可選的。當然,所有的方法支持的實現都應當符合下述的方法各自的語義定義。此外,除了上述方法,特定的HTTP服務器還能夠擴展自定義的方法。

     http的訪問中,一般常用的兩個方法是:GET和POST。其實主要是針對DELETE等方法的禁用。有兩種方式:

一、修改應用中的web.xml:

    第一步:修改web-app協議

     Xml代碼     

     <?xml version="1.0" encoding="UTF-8"?>     

     <web-app xmlns="http://java.sun.com/xml/ns/j2ee"     

                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     

                      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"     

                      version="2.4">  

  

    第二部:在應用程序的web.xml中添加如下的代碼即可

    <security-constraint>     
    <web-resource-collection>     
       <url-pattern>/*</url-pattern>     
       <http-method>PUT</http-method>     
    <http-method>DELETE</http-method>     
    <http-method>HEAD</http-method>     
    <http-method>OPTIONS</http-method>     
    <http-method>TRACE</http-method>
    </web-resource-collection>     
       <auth-constraint>     
       </auth-constraint>     
    </security-constraint>     
    <login-config>     
        <auth-method>BASIC</auth-method>     
    </login-config>  

 

二、修改tomcat中conf下的web.xml

     步驟同上。

 

修改應用中的web.xml就針對本應用起作用,修改tomcat中的web.xml就可以對啟動在該tomcat下所有的應用起作用。

 

 

在未限制DELETE等方法前(即未做上述web.xml的內容的添加之前),測試http的DELETE方法的效果,方式如下:

第一步:

在Tomcat的web.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化參數

Java代碼   收藏代碼
  1. <init-param>  
  2.     <param-name>readonly</param-name>  
  3.     <param-value>false</param-value>  
  4. </init-param>  

 

readonly參數默認是true,即不允許delete和put操作,所以默認的通過XMLHttpRequest對象的put或者delete方法訪問就會報告 http 403 forbidden 錯誤。

 

第二步:

從客戶端通過 Ajax XMLHTTPRequest 發起 DELETE/PUT 請求,利用AJAX的方式調用DELETE,

Java代碼   收藏代碼
  1. <script type="text/javascript">  
  2. function getXMLHTTPRequest(){  
  3.     if (XMLHttpRequest)    {  
  4.         return new XMLHttpRequest();  
  5.     } else {  
  6.         try{  
  7.             return new ActiveXObject('Msxml2.XMLHTTP');  
  8.         }catch(e){  
  9.             return new ActiveXObject('Microsoft.XMLHTTP');  
  10.         }  
  11.     }  
  12. }  
  13. var req = getXMLHTTPRequest();  
  14. req.open('DELETE','http://localhost:8080/yours_web/test.html',false);  
  15. req.send(null);  
  16. document.write(req.responseText);  
  17.   
  18. </script>  

 document.write(req.responseText);這一句既是調用了Ajax,也是將刪除的test.html返回回來,如果刪除成功,那么應該看到的是404的效果。

 

 

 

另外對於web.xml配置參數的說明可參考:

http://www.blogjava.net/baoyaer/articles/107428.html

 

對於http深入了解可以參考:

http://blog.csdn.net/lyq5655779/article/details/7515284


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM