кот отказывает в доступе к определенным файлам - PullRequest
6 голосов
/ 17 марта 2011

У меня есть веб-приложение в Tomcat с основным файлом JSP, который включает другой файл JSP в центре страницы. Я хочу запретить доступ к этому файлу напрямую и разрешить только прямой доступ к главной странице индекса.

Кроме того, я не хочу, чтобы пользователи могли напрямую получать изображения из моего веб-приложения.

Как я могу отклонить эти запросы с Tomcat? Я хочу, чтобы все запросы пересылались на мою главную страницу.

Ответы [ 3 ]

9 голосов
/ 18 марта 2011

Со страницы Запретить доступ для включения файлов .

Добавить в web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Include files</web-resource-name>
        <description>No direct access to include files.</description>
        <url-pattern>/inc/*</url-pattern>
        <http-method>POST</http-method>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <description>No direct browser access to include files.</description>
        <role-name>NobodyHasThisRole</role-name>
    </auth-constraint>
</security-constraint>
4 голосов
/ 17 марта 2011

Одним из способов будет реализация Filter

Например:

package package;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterImplementation implements Filter
{
    public void init(FilterConfig filterConfig) throws ServletException {...}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        // if you detect an illegal request, throw an exception or return without calling chain.doFilter.
        chain.doFilter(request, response);     
    }

    public void destroy() {...}
}

добавить следующее в web.xml:

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>package.FilterImplementation</filter-class>
</filter>

<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

EDIT

Все, что вам нужно знать о том, какая страница запрашивается, находится в параметре request. Тип параметра - ServletRequest, однако он почти всегда будет HttpServletRequest, поэтому вы можете сделать следующее:

if (request instanceof HttpServletRequest)
{
    HttpServletRequest hrequest = (HttpServletRequest) request;
    String uri = hrequest.getRequestURI(); // you should be able to just use this
    String uri = hrequest.getRequestURL(); // otherwise there are more in-depth fields
}
3 голосов
/ 17 марта 2011
  1. Что касается включенных файлов JSP, вы должны поместить их в папку WEB-INF. Таким образом, они не доступны непосредственно из браузера, но это позволяет вашему основному файлу JSP включать их.

  2. То же самое с изображениями, но изображения немного сложнее, но выполнимо. Поместите их в папку WEB-INF, и поэтому вы не можете получить статический доступ к изображениям из тега <img>. Что вам нужно будет сделать, это создать сервлет, который будет служить прокси для получения изображения и его потоковой передачи ... так что ваш <img> выглядит примерно так: -

==========

<img src="/webapp/imageServlet?img=world.jpg">

==========

Ваш ImageServlet будет считывать файл world.jpg из папки WEB-INF и выводить изображение на поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...