Как избежать доступа пользователя к странице .xhtml в JSF?

#java #jsf #jsf-2

#java #jsf #jsf-2

Вопрос:

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

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

Комментарии:

1. Попробуйте поместить их в WEB-INF

2. @ahvargas: Это не работает для JSF.

3. Являются ли ограничения аддитивными? Например: <ограничение безопасности> <отображаемое имя> Ограничить необработанные документы XHTML</отображаемое имя> <коллекция веб-ресурсов> <название веб-ресурса>XHTML</имя веб-ресурса> <url-шаблон>*.xhtml</url-шаблон> </коллекция веб-ресурсов> <ограничение авторизации /> </ограничение безопасности> <ограничение безопасности> <коллекция веб-ресурсов> <название веб-ресурса >Auth</web-resource-name> <url-шаблон>/*</url-шаблон> </web-resource-collection> <auth-constraint> <имя роли>Администратор</role-name> </auth-constraint> </security-constraint> не ограничивает передачу необработанных xhtml-файлов пользователям с

Ответ №1:

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

Ответ №2:

Помимо определения a, <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 в любом случае 🙂

Комментарии:

1. @s_t_e_v_e: GAE в любом случае странный зверь.

2. Я не понимаю, если вы определяете <security-constraint> для *.xhtml и <url-pattern> устанавливаете в *.xhtml, то как настроить xhtml <welcome-file>, чтобы он не блокировался?

3. @michal777: «Кроме …», поэтому вам не нужно определять оба .

Ответ №3:

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

  1. редактировать web.xml как описано выше
  2. добавить в appengine-web.xml
 <static-files>
    <exclude path="/**.xhtml" />
</static-files>`
  

Ответ №4:

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

 @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() {
    }
}
  

Ответ №5:

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