Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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

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

Ответ 3

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

  • изменить web.xml, как описано выше
  • добавить в 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 и серверов. без исключения этих файлов, GAE автоматически интерпретирует файлы с расширением .xhtml как статические файлы, которые обслуживаются выделенными серверами из фермы серверов googles. подробнее здесь: https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files