Я новичок в 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