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()
undsetWrapper()
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches problem bei Tomcat 7 und war in der Lage, um es durch die Bearbeitung der " top-level-element in
./conf/context.xml
zu schauen, wieWas ich nicht herausfinden kann, ist, wie der Tomcat manager-servlets sind in der Lage, zu laden, ohne diese Konfiguration. Wer irgendwelche Hinweise?
Fand ich die Antwort. Ich brauchte, um privileged=true im Kontext des host-innen server.xml