4

我想通過使用數據庫的境界,使基於表單的身份驗證,但我一直都想與這消息時,我嘗試在Tomcat的6 Tomcat管理來驗證我已經創建了一個表user_name和user_roles和映射的用戶名(藍色)到管理員和經理作爲在mysql中的user_roles表中的角色,但我仍然無法進行身份驗證。我已經重新境界標籤在server.xml文件:如何解決訪問已經在Tomcat中被拒絕的請求的資源?

<Realm className  = "org.apache.catalina.realm.JDBCRealm" 
     debug   = "99" 
     driverName  = "com.mysql.jdbc.Driver" 
     connectionURL = "jdbc:mysql://localhost:3306/mail" 
     connectionName = "root" 
     userTable  = "users" 
     userNameCol = "user_name" 
     userCredCol = "user_pass" 
     userRoleTable = "user_roles" 
     roleNameCol = "role_name" 
/> 

誰能告訴我什麼是錯的,我做的,我怎麼能形式通過使用基於數據庫的認證?

  1. 我已經聲明瞭用戶「藍」既是管理員和經理,當我試圖在Tomcat管理頁面登錄,這是給我的留言:

    HTTP狀態403 - 訪問請求的資源已被拒絕

  2. 當我輸入錯誤的用戶名或密碼,Tomcat的再次詢問用戶名和密碼,而不是顯示該消息。

+0

1.當您嘗試以管理員身份登錄,會發生什麼? 2.當你故意給出錯誤的密碼時會發生什麼 - 它是否會給出相同的錯誤? – JoseK 2010-03-25 09:07:25

+0

1.我已經聲明瞭用戶「藍」既是管理員和經理,當我試圖在Tomcat管理頁面登錄,這是給我的留言:HTTP狀態403 - 訪問請求的資源已被拒絕 2.當我輸入錯誤的用戶名或密碼,Tomcat的再次詢問用戶名和密碼,而不是顯示該消息。 – Stardust 2010-03-25 09:19:06

回答

2

我還沒試過這個。你可以嘗試改變在TOMCAT_HOME_DIR\webapps\manager\WEB-INF\web.xml在auth方法來點AUTH-方法形成集。領域名稱無關緊要。

<login-config> <auth-method>FORM</auth-method> <realm-name>Tomcat Manager Application</realm-name> </login-config> 

也只是確認 - 你必須在server.xml中只保留一個Realm,註釋掉默認值。

0

您需要定義命名爲「tomcat」另一個用戶角色,讓用戶「藍」這個組的成員。

您可以更改web.xml文件通過這種約束需要角色組的名稱:

<auth-constraint> 
    <role-name>tomcat</role-name> 
</auth-constraint> 
0

我得到了同樣的錯誤「HTTP狀態403 - 訪問請求的資源已被拒絕」,而不是彈出窗口,當我使用BASIC身份驗證。我曾使用我的自定義角色(myname),但它沒有奏效。所以,我將角色設置爲(manager-gui)併爲其分配用戶名和密碼。設置後,我得到了要求的結果。使用manager-gui作爲角色,然後重試。

2

HTTP狀態403(訪問請求的資源已被拒絕),可以表明要麼你鍵入了太多不正確的憑據或您一些問題,您的配置。

一個可能的問題可能是您的瀏覽器可能您的身份驗證憑據緩存,因爲基本身份驗證,您的瀏覽器將只提示您輸入憑據你第一次驗證您的網站。成功認證後,就不會再提示你,強迫你的瀏覽器再次提示你,有時你需要完全關閉了瀏覽器(或與其他網絡瀏覽器試試)。

如果您尚未更改任何配置文件,請檢查安裝文件conf/tomcat-users.xmllocate tomcat-users.xml)。該文件必須包含允許您使用Tomcat webapp的憑證。

例如,添加經理桂角色名爲tomcats3cret密碼的用戶,添加以下到上面列出的配置文件:

<role rolename="manager-gui"/> 
<user username="tomcat" password="s3cret" roles="manager-gui"/> 

然後你可以從訪問您的webapps經理/manager/html(例如配置更改後重新加載)。

瞭解更多:Manager App HOW-TO

如果你想實現自己的安全約束(在web.xml),試試下面的例子(</web-app>前加入結尾):

<!-- This security constraint protects your webapp interface. --> 
<login-config> 
    <!-- Define the Login Configuration --> 
    <auth-method>BASIC</auth-method> 
    <realm-name>Webapp</realm-name> 
</login-config> 
<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Admin</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    <http-method>GET</http-method> 
    <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>*</role-name> 
    </auth-constraint> 
    <!-- Specifying a Secure Connection --> 
    <user-data-constraint> 
    <!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE --> 
    <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<!-- Authorization, see: tomcat-users.xml --> 
<security-role> 
    <role-name>*</role-name> 
</security-role> 

的login-config元素包含auth-method元素,它指定我們使用的驗證方法,即BASICsecurity-constraint元素包含3個元素:web-resource-collection,auth-constraintuser-data-constraint。 web-resource-collection指定了我們應用程序中需要驗證的部分。 /*表示整個應用程序需要驗證。 auth-constraint指定用戶訪問受保護資源所需的角色。用戶數據約束的傳輸保證可以是NONE,CONFIDENTIALINTEGRAL。我們將其設置爲NONE,這意味着當您嘗試訪問受保護的資源時,不需要重定向到SSL

另外,還要確保你已經行:

<Realm className="org.apache.catalina.realm.MemoryRealm" /> 

conf/server.xmlEngine部分)內。

如果您仍然有問題,請嘗試:

  • 檢查,如果您正在編輯正確的XML文件,
  • 驗證XML文件,例如catalina.sh configtestxmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
  • <security-constraint><url-pattern>火柴或設置爲/*
  • 檢查你的Tomcat日誌(例如/var/log/tomcat7),
  • INFO - >FINE/FINEST)在logging.propertieslog4j.properties(INFO,重度,警告,INFO,CONFIG,FINE,FINER,FINEST或ALL),重新啓動托馬特和檢查日誌,
  • 如果沒有在日誌中,請檢查您是否正在使用log4j記錄系統時,勾選右側日誌(sudo lsof | grep -E "java.*(out|txt|log)$"tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out
  • ,通過放置庫和log4j.properties到正確的文件夾,並配置它確保您initialized it properly
  • 測試與捲曲BASIC驗證:

    • 無憑證:

      $ curl -vv http://example.com:8983/solr/ 
      

      通常請求應該返回HTTP/1.1 401未授權和 「WWW驗證」 報頭應指示基本認證是必需的。

    • 與憑證:

      $ curl -vv -u tomcat:tomcat http://example.com:8983/solr/ 
      

      該請求應與「授權」報頭被髮送,它應該進行認證。如果您的憑據無效,您應該得到:HTTP/1.1 401未授權。如果用戶已通過身份驗證,但無權查看資源,則應獲得:HTTP/1.1 403禁止登錄

  • 也許用戶鎖定機構已被激活爲too many failed authentication attemptsLockOutRealm

  • 停止和手動運行的Tomcat(以同樣的方式如下所示:ps wuax | grep ^tomcat),例如:

    # ps wuax | grep ^tomcat 
    tomcat7 884 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties ... org.apache.catalina.startup.Bootstrap start 
    $ /etc/init.d/tomcat7 stop 
    $ sudo sudo -u tomcat7 /usr/lib/jvm/java-7-openjdk-amd64/bin/java ... -Dorg.apache.catalina.level=FINEST org.apache.catalina.startup.Bootstrap start 
    

    或者開始使用catalina.sh腳本,例如:

    $ . /etc/default/tomcat7 
    $ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 CATALINA_HOME=/usr/share/tomcat7 CATALINA_BASE=/var/lib/tomcat7 CATALINA_PID=/var/run/tomcat7.pid CATALINA_TMPDIR=/tmp LOGGING_CONFIG="-Dorg.apache.catalina.level=FINEST" 
    $ /usr/share/tomcat7/bin/catalina.sh run 
    

    或者在debug mode

    $ JPDA_SUSPEND=y catalina.sh jpda start 
    

    ,並檢查您catalina.out日誌。

  • 不得已是調試過程:sudo strace -fp PID

+1

真的很有幫助的答案!謝謝! – 2016-01-04 14:16:01

相關問題