Читает ли Tomcat 8 файлы web.xml и context.xml в моем API Java Rest (война)? - PullRequest
0 голосов
/ 23 мая 2018

Пожалуйста, вы можете помочь.Я создал проект Java Rest API (Dynamic Web) в Eclipse и, при необходимости, включил библиотеки Javax и Jersey и развернул его на своем облачном сервере Tomcat 8.Он возвращает базовый ответ JSON, когда я вызываю его через HTTP, например.http://www.mydomain.co.uk:8080/MyJavaProject/context_string/path_params

Но когда я включил SSL / TLS на сервере с подлинным сертификатом, он выдает 404 Not Found in Postman.

https://www.mydomain.co.uk/MyJavaProject/context_string/path_params

Error.log показывает, что «файл не существует» ошибка в «/ path / MyJavaProject / context_string / path_params» (но файл не существует в качестве его ссылочного параметрав моем остальном API, так что я не думаю, что Tomcat знает, чтобы использовать файл WAR).

Я получаю навигатор структуры каталогов, если я вызываю просто: https://www.mydomain.co.uk/MyJavaProject

Журналы все в порядкеи не показывать ошибок сейчас.Я следил за бесчисленными постами на форуме по твикам и ни одна из них не работает.Я поместил значения безопасности в мой web.xml в мои приложения WEB-INF.Разрешения на войну и взорванную папку войны - 777.

Но я читал, что что-то называется context.xml, который используется в этой области, но может или не может использоваться, если установлен 'autoDeploy-true'(у меня есть).

Итак ... мой вопрос, как я могу узнать, действительно ли Tomcat читает context.xml и web.xml в моем приложении?Любые хорошие трюки.Это моя последняя идея, чтобы попытаться исправить мою ошибку 404.

Мои приложения web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MyProject</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>
com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <security-constraint>
<web-resource-collection>
<web-resource-name>MyProject</web-resource-name>
<url-pattern>/context_string/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>

Мои приложения context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="" path="" reloadable="true">
</Context>

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Устранена проблема с использованием обоих комментариев к этому вызову.

  1. Был конфликт портов, поэтому я изменил и server.xml, и apache2 /../ 000default.conf наиспользуйте 8443 (я нашел 443 темпераментных).Кроме того, теперь я включаю «8443» в качестве порта во все мои URL-вызовы сейчас, а не в порт.

  2. Я добавил это в файл .conf:

    SSLProxyEngine на

    ProxyPass / MyProject / context https://www.mydomain.co.uk/MyProject/context

    ProxyPassReverse / MyProject / context https://www.mydomain.co.uk/MyProject/context

  3. Пришлось также a2enmod proxy_http и установитьТег VirtualHost должен быть ip, а не '*', т.е. ipaddress.8443, и для хорошей проверки проверьте, работает ли он, используя

apache2ctl configtest

Я действительно не сделал намного большес web.xml в моем приложении, и я удалил context.xml из моего приложения.

Это был действительно случай настройки ручек и циферблатов, пока он не заработал, и заняло у меня около 2 недель.Почему это не может быть легко.

Вот мои файлы для справки

apache2 / .. conf

<VirtualHost ipaddress:8443>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

        LogLevel debug
        #SetEnv HTTPS on
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/mydomain_co_uk.crt
        SSLCertificateKeyFile /etc/ssl/private/www.mydomain.co.uk.key
       # SSLCertificateKeyFile /etc/ssl/certs/mydomain_co_uk.pem
        SSLCACertificateFile /etc/ssl/certs/mydomain_co_uk.ca-bundle
        ServerName www.mydomain.co.uk
SSLProxyEngine on
    ProxyPass /MyProject/context https://www.mydomain.co.uk/MyProject/context 
    ProxyPassReverse /MyProject/context https://www.mydomain.co.uk/MyProject/context

Alias /ProjectName"/var/lib/tomcat8/webapps/ProjectName"


<Directory "/var/lib/tomcat8/webapps/ProjectName">
Options Indexes FollowSymLinks
AllowOverride all
Allow from all
</Directory>



<Location />
Require all granted
</Location>



        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Server.xml

<Connector
           protocol="org.apache.coyote.http11.Http11AprProtocol"
           port="8443" maxThreads="200" clientAuth="false"
           scheme="https" secure="true" SSLEnabled="true"
           SSLCertificateFile="/etc/ssl/certs/mydomain_co_uk.crt"
           SSLCertificateKeyFile="/etc/ssl/private/www.mydomain.co.uk.key"
           SSLPassword="planetx"
           SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>


    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <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>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

web.xml из моих приложенийвеб-инф

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Projectname</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>
com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <security-constraint>
<web-resource-collection>
<web-resource-name>Projectname</web-resource-name>
<url-pattern>/context</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
0 голосов
/ 23 мая 2018

Вам необходимо использовать обратный прокси-сервер в apache2 или nginx независимо от того, что вы используете для внутреннего перенаправления запросов на tomcat.

https использует порт 443 по умолчанию на сервере.Так что либо вам нужно определить новый порт с помощью https, либо перенаправить его.Прочитайте this и this , чтобы изменить его в apache2.

Это больше похоже на комментарий, но я не могу добавить комментарий.

...