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