2012-03-26 1 views
0

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

Я попытался изменить материал в 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, это было бы очень признательно. Я искал честный бит и ничего не нашел.

EDIT: после небольшого тестирования я обнаружил, что иногда иногда срабатывают другие методы, иногда это не так. Не могу понять, почему и при каких обстоятельствах.

+1

Это не имеет никакого отношения к GWT. GWT только на стороне клиента; GWT-RPC и RequestFactory - это простые сервлеты, в них нет ничего особенного. –

+0

Хорошо, спасибо. Я новичок в использовании GWT и сервлетов, не понял этого. – Zarjio

ответ

2

Если вы не хотите, чтобы некоторые файлы были доступны клиентам, лучший способ - не развертывать их и не развертывать в специальных папках вашей войны 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

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