Tomcat 7 Beschränkt (ContainerServlet) Fehler

Habe ich fest auf dieser einen für eine Weile. Ich bin versuchen, auf den ContainerServlet ich umgesetzt mit HttpClient mit Tomcat 7. Ich erhalte die Fehlermeldung "Eingeschränkte(ContainerServlet)". Ich habe die Standardauthentifizierung und versuchte, um es einzurichten, ebenso wie die eingebaute Host-Manager-Anwendung mit kein Glück.

Meine HostManagerServlet beginnt mit:

public class HostManagerServlet
extends HttpServlet implements ContainerServlet {...

Meine web.xml enthält:

<servlet>
            <servlet-name>virtualHostCreator</servlet-name>
            <servlet-class>com.eatmyfish.servlets.HostManagerServlet</servlet-class>
          </servlet>
          <servlet-mapping>
            <servlet-name>virtualHostCreator</servlet-name>
            <url-pattern>/virtualhostcreator/*</url-pattern>
          </servlet-mapping>
    <security-constraint>
        <web-resource-collection>
          <web-resource-name>HostManager commands</web-resource-name>
          <url-pattern>/virtualhostcreator/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
           <!-- NOTE:  This role is not present in the default users file -->
           <role-name>admin-script</role-name>
        </auth-constraint>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>HTMLHostManager commands</web-resource-name>
          <url-pattern>/virtualhostcreator/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
           <!-- NOTE:  This role is not present in the default users file -->
           <role-name>admin-gui</role-name>
        </auth-constraint>
      </security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
  </login-config>
<security-role>
    <description>
      The role that is required to log in to the Host Manager Application HTML
      interface
    </description>
    <role-name>admin-gui</role-name>
  </security-role>
  <security-role>
    <description>
      The role that is required to log in to the Host Manager Application text
      interface
    </description>
    <role-name>admin-script</role-name>
  </security-role>

Meine tomcat-users.xml enthält:

.
.
.
<role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <role rolename="manager-gui"/>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,admin-script,manager-gui"/>
.
.
.

Den code, der macht die HttpClient-call (ich habe versucht ein paar verschiedene Ansätze):

Ansatz Ein -

String url = environment.getProperty("baseurl");
        url += "virtualhostcreator/createVirualHost?name="+group.getGroupName();
        HttpClient httpclient = new DefaultHttpClient();

        HttpGet httpget = new HttpGet(url);
        httpget.addHeader(BasicScheme.authenticate(
                 new UsernamePasswordCredentials("tomcat", "tomcat"),
                 "UTF-8", false));
        HttpResponse response = httpclient.execute(httpget);

Ansatz Der Zwei -

String url = environment.getProperty("baseurl");
        url += "virtualhostcreator/createVirualHost?name="+group.getGroupName();
        DefaultHttpClient httpclient = new DefaultHttpClient();
        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope("localhost", 8080),
                new UsernamePasswordCredentials("tomcat", "tomcat"));
        //Create AuthCache instance
        AuthCache authCache = new BasicAuthCache();
        //Generate BASIC scheme object and add it to the local
        //auth cache
        HttpHost targetHost = new HttpHost("localhost", 8080, "http");
        BasicScheme basicAuth = new BasicScheme();
        authCache.put(targetHost, basicAuth);

        //Add AuthCache to the execution context
        BasicHttpContext localcontext = new BasicHttpContext();
        localcontext.setAttribute("http.auth.auth-cache", authCache);

        HttpGet httpget = new HttpGet(url);

        HttpResponse response = httpclient.execute(targetHost, httpget,localcontext);

Den Fehler den stacktrace:

SEVERE: Allocate exception for servlet virtualHostCreator
java.lang.SecurityException: Restricted (ContainerServlet) class com.eatmyfish.servlets.HostManagerServlet
    at org.apache.catalina.core.DefaultInstanceManager.checkAccess(DefaultInstanceManager.java:536)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Irgendwelche Ideen was ich falsch mache? Ich Schaffe es nicht, Vergangenheit, die Eingeschränkte(ContainerServlet) Fehler.

  • Dean - wenn Sie Fragen, eine Frage wie diese, sollten Sie den stacktrace, dass der Fehler gemeldet. Wenn nichts sonst, wird es machen es einfacher für andere Menschen mit dem gleichen problem zu finden, Ihre Frage / Antwort.
  • Ich bearbeitet meine Frage umfassen den stack-trace pro Ihren Antrag.
  • was du da geschrieben hast in getWrapper() und setWrapper() Methoden
  • es wurde so lange, ich bin mir nicht sicher, ob ich Folgen. Was getWrapper() und setWrapper() Methoden? Könnte ich diesen code in die source-control irgendwo kann ich gehen, sehen; aber ich bin nicht sicher, ich habe getWrapper und setWrapper Methoden. Warum glaubst du, habe ich?
  • Ich fragte coz, wenn Sie implementieren ContainerServlet du bist angenommen, überschreiben diese beiden Methoden, dass ist der Grund, warum. Ich habe jedoch in tomcat 8.0.33 Quellcode und sah, wie haben Sie es geschafft,möchte aber trotzdem wissen, was Sie Tat.
Schreibe einen Kommentar