Как избежать доступа пользователя к странице .xhtml в JSF? - PullRequest
12 голосов
/ 15 апреля 2011

Я новичок в JSF и пишу сначала просто веб-приложение jsf.

URL с .jsf сопоставляются с файлами .xhtml в WebContent, но почему я могу открыть .xhtml в веб-браузере со всеми тегами jsf.Как это защитить?

Ответы [ 5 ]

18 голосов
/ 15 апреля 2011

Вы можете добавить ограничение безопасности к вашему web.xml, блокирующему все запросы к *.xhtml.

<security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>
10 голосов
/ 15 апреля 2011

Помимо определения <security-constraint> для блокировки прямого доступа к .xhtml файлам, как правильно ответил Stacker на этот вопрос, вы также можете просто изменить <url-pattern> сопоставления FacesServlet с *.jsf на *.xhtml.

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

В JSF 1.x это раньше заканчивалось бесконечным циклом, но в JSF 2.x больше нет. Таким образом, вы можете просто позвонить / связать все страницы как .xhtml, не используя разные расширения. Единственным недостатком является то, что вы не сможете отобразить «простой» XHTML-файл без вызова FacesServlet, но такая страница должна быть названа .html в любом случае:)

2 голосов
/ 16 июля 2012

В GAE вам нужны две вещи:

  1. отредактируйте файл web.xml, как описано выше
  2. добавить в appengine-web.xml
<static-files>
    <exclude path="/**.xhtml" />
</static-files>`
1 голос
/ 27 июня 2013

Вы можете использовать фильтр сервлетов

@WebFilter(filterName = "XhtmlFilter", urlPatterns = { "*.xhtml" })
public class XhtmlFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        ((HttpServletResponse) response).sendError(404);
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}
0 голосов
/ 01 июля 2013

, насколько я понял, ответ mk761203 определенно полезен при настройке проекта для google app engine и серверов.без исключения этих файлов GAE автоматически интерпретирует файлы с расширением .xhtml как статические файлы, которые обслуживаются выделенными серверами из фермы серверов Google.подробнее здесь: https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files

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