Я новичок в JSF и пишу сначала просто веб-приложение jsf.
URL с .jsf сопоставляются с файлами .xhtml в WebContent, но почему я могу открыть .xhtml в веб-браузере со всеми тэгами jsf. Как защитить это?
Я новичок в JSF и пишу сначала просто веб-приложение jsf.
URL с .jsf сопоставляются с файлами .xhtml в WebContent, но почему я могу открыть .xhtml в веб-браузере со всеми тэгами jsf. Как защитить это?
Вы можете добавить ограничение безопасности на 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>
Помимо определения <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 в любом случае:)
В GAE вам нужны две вещи:
<static-files>
<exclude path="/**.xhtml" />
</static-files>`
Вы можете использовать фильтр сервлета
@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() {
}
}
Насколько я понял, ответ mk761203 определенно полезен при настройке проекта для движка Google и серверов. без исключения этих файлов, GAE автоматически интерпретирует файлы с расширением .xhtml как статические файлы, которые обслуживаются выделенными серверами из фермы серверов googles. подробнее здесь: https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files