Ich bin neu in JSF und schreiben erste einfach jsf web app.
URL mit .jsf werden in WebContent auf .xhtml-Dateien abgebildet, aber warum kann ich .xhtml im Webbrowser mit allen jsf-Tags öffnen? Wie kann man dies schützen?
Ich bin neu in JSF und schreiben erste einfach jsf web app.
URL mit .jsf werden in WebContent auf .xhtml-Dateien abgebildet, aber warum kann ich .xhtml im Webbrowser mit allen jsf-Tags öffnen? Wie kann man dies schützen?
Sie könnten eine Sicherheitsbeschränkung zu Ihrer web.xml
Blockierung aller Anfragen an *.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>
Neben der Definition einer <security-constraint>
um den direkten Zugang zu .xhtml
Dateien, wie von Stacker auf diese Frage richtig beantwortet, könnten Sie auch einfach die <url-pattern>
de la FacesServlet
Kartierung von *.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>
In JSF 1.x endete dies in einer Endlosschleife, aber in JSF 2.x nicht mehr. Man könnte also einfach alle Seiten als .xhtml
ohne mit verschiedenen Erweiterungen herumspielen zu müssen. Der einzige Nachteil ist, dass Sie eine "einfache" XHTML-Datei nicht anzeigen können, ohne die FacesServlet
, aber eine solche Seite sollte den Namen .html
sowieso :)
Sie können einen Servlet-Filter verwenden
@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() {
}
}
Soweit ich es erfahren habe, ist die antwort von mk761203 auf jeden fall hilfreich, wenn man ein projekt für google app engine und server faces einrichtet. ohne den ausschluss dieser dateien fügt die GAE die dateien mit der .xhtml extension automatisch als statische dateien ein, die von dedizierten servern von googles server farm bedient werden. lesen sie hier mehr: https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.