4

サーブレットHelloServletが与えられた場合:

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * Default constructor.
     */
    public HelloServlet() {
    // TODO Auto-generated constructor stub
    }


   @Override
    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.print("hello my Friend: " + request.getRemoteUser());
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("This is the Test Servlet");

    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String headerName = (String) headerNames.nextElement();
        out.print("<br/>Header Name: <em>" + headerName);
        String headerValue = request.getHeader(headerName);
        out.print("</em>, Header Value: <em>" + headerValue);
        out.println("</em>");
    }
    }
....
}

web.xmlでTomcatセキュリティポリシーが宣言されている場合:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>my application</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>

    <auth-constraint>
        <role-name>tomcat</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/login-failed.jsp</form-error-page>
    </form-login-config>
</login-config>

conf/tomcat-users.xmlのtomcat-roles定義

  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>

「server.xml」のレルムは次のとおりです。

  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
         resources under the key "UserDatabase".  Any edits
         that are performed against this UserDatabase are immediately
         available for use by the Realm.  -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
  </Realm>

、URL localhost / jsfWorkgroup/HelloServletを使用してサーブレット「HelloServlet」にアクセスしようとしました。

予想どおり、ログインページに(再)リダイレクトされます。

<form method="POST" action="j_security_check">
<table>
  <tr>
    <td colspan="2">Login to the Tomcat-Demo application:</td>
  </tr>
  <tr>
    <td>Name:</td>
    <td><input type="text" name="j_username" /></td>
  </tr>
  <tr>
    <td>Password:</td>
    <td><input type="password" name="j_password"/ ></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="Go" /></td>
  </tr>
</table>
</form>

使用したIDトークンに関係なく:

  1. ユーザー名:tomcatパスワード:tomcat
  2. ユーザー名:両方のパスワード:Tomcat

私はまだ/login-failed.jspに失敗します。

これについての私の見解は次のとおりです。tomcatはログインページにリダイレクトするように動作しますが、ログインを有効にするためにconf / tomcat-users.xmlを読み取りません(数回再起動した後でも)。

あなたはそれについてどう思いますか ?

構成:Tomcat 7.0.23、Eclipse-Indigo

4

5 に答える 5

2

@ pd40の提案に続いて、examples / jsp / security / protected / examplesを試しましたが、Tomcatが通常他のサーバー(Glassfish、JBossなど)と一緒に埋め込まれているEclipse IDEでは試しませんでしたが、tomcatサーバーを起動しましたスタンドアロンとして(/ binディレクトリに)..そしてそこで動作します。

しかし、Eclipse内のTomcatでセキュリティベースのWebアプリケーションを実行しようとすると、上記の構成を使用しても、再び失敗しました。

私が正しいかどうかはわかりませんが、Webアプリケーションセキュリティは、TomcatがEclipseの外部で実行されている場合にのみサポートされます。

于 2012-07-08T16:30:43.267 に答える
1

Tomcatの例web.xmlには、以下のセクションが含まれています<login-config>

<!-- Security roles referenced by this web application -->
<security-role>
  <role-name>role1</role-name>
</security-role>
<security-role>
  <role-name>tomcat</role-name>
</security-role>

あなたが必要とするかもしれません。


Tomcatには、試行しているものと同様のtomcat-users.xmlを使用した認証を含むwarの例が含まれています。tomcat home / webapps / examplesがデプロイされている場合は、 http:// localhost / examples / jsp / security /protected/にアクセスしてみてください。tomcat-users.xmlのrole/userセクションの周りのXMLコメントが削除されていることを確認してください。デフォルトではコメント化されています。

<!-- Un comment me 
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->

認証の問題を診断するために、ログを増やすことを検討できます。

于 2012-07-08T10:30:30.630 に答える
1

これは私が答えるには遅すぎますが、おそらくここに来る誰かがこれが役に立つと思うかもしれません。

実際、Tomcat構成がEclipseを介して機能せず、その外部で実行されないという問題に直面している場合は、[Eclipseサーバー]タブからサーバーを削除して、再度追加してください。これで問題は解決するはずです。

于 2013-05-21T04:24:00.930 に答える
1

web.xmlで保護されたページを定義することにより、コンテンツへのアクセスを制限しました。

<url-pattern>/*</url-pattern>

そのワイルドカードは、コンテンツパス内のすべてのページを参照しています。したがって、ログインページへのリダイレクトの無限ループを取得します。

于 2018-09-20T08:36:35.557 に答える
0

eclipseに埋め込まれているtomcat-users.xmlでユーザーの構成を変更した場合、新しいユーザーが認識されるようにするには、サーバーだけでなくeclipseを再起動する必要があることを発見しました。eclipseはtomact-user.xmlファイルをキャッシュしていると思います。

于 2013-10-15T10:45:34.240 に答える