Перенаправление на стороне сервера в web.xml? - PullRequest
0 голосов
/ 26 марта 2012

Мне интересно, как использовать GWT, чтобы скрыть определенные файлы, хранящиеся на сервере.У меня есть базы данных с паролями и тому подобное, и мне нужно, чтобы пользователи перенаправлялись из баз данных на какую-то другую страницу.Как мне это сделать?

Я пытался что-то изменить в web.xml:

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/actual_url</url-pattern>
    <url-pattern>/database1.db</url-pattern>
    <url-pattern>/database2.db</url-pattern>
</servlet-mapping>

И

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/actual_url</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/database1.db</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/database2.db</url-pattern>
</servlet-mapping>

Обе разрешают доступ к сервлету по адресу actual_urlкак они должны, но я все еще могу получить доступ к database1.db и database2.db.

Я знаю, что могу скрыть эти файлы, используя .htaccess для Apache, но я бы предпочел решение GWT.Кто-нибудь имеет какие-либо идеи?

Кроме того, если кто-то может найти ссылку на web.xml, это было бы очень полезно.Я немного искал и ничего не нашел.

РЕДАКТИРОВАТЬ: После небольшого тестирования я обнаружил, что иногда второй метод иногда работает, иногда нет.Не могу сказать, почему или при каких обстоятельствах.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Если вы не хотите, чтобы некоторые файлы были доступны клиентам, лучше всего не развертывать их или развертывать в специальных папках WEB-INF или META-INF вашей войны.

Если вынеобходимо развернуть их за пределами WEB-INF, тогда вы можете ограничить доступ к ним, используя security-constraints:

<security-constraint>
   <display-name>Denied</display-name>
   <web-resource-collection>
      <web-resource-name/> <!-- mandatory, but can be empty -->
      <url-pattern>/database1.db</url-pattern>
      <url-pattern>/database2.db</url-pattern>
      <!-- alternatively, you could simply use:
         <url-pattern>*.db</url-pattern>
      -->
   </web-resource-collection>
   <auth-constraint>
      <!-- an empty but not absent auth-constraint denies everyone -->
   </auth-constraint>
</security-constraint>

Обратите внимание, что если вы используете AppEngine, статические файлы обслуживаются специально, а ваши web.xml не относится к ним, если вы не перечислите их в своем appengine-web.xml (см. примечание в http://code.google.com/appengine/docs/java/config/webxml.html#Servlets_and_URL_Paths, и см. http://code.google.com/appengine/docs/java/config/appconfig.html#Including_and_Excluding_Files)

0 голосов
/ 26 марта 2012

Насколько мне известно, серверный код GWT - чистый Java EE.Похоже, вам нужно просто просмотреть спецификации Java EE, чтобы найти ответ.
Еще одно предложение - развертывание ваших сервлетов доступа к базе данных в отдельном приложении.Это позволит вам использовать другой сервер (реальный или виртуальный) и настроить его свойства подключения таким образом, чтобы никто другой, кроме вас, не мог получить к нему доступ.
Удачи!

...