13 Stimmen

Wie verhindert man den Benutzerzugriff auf die .xhtml-Seite in JSF?

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?

20voto

stacker Punkte 65961

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>

11voto

BalusC Punkte 1034465

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 :)

2voto

mk761203 Punkte 76

Für GAE benötigen Sie zwei Dinge:

  1. web.xml wie oben beschrieben bearbeiten
  2. in appengine-web.xml hinzufügen

    <static-files> <exclude path="/**.xhtml" /> </static-files>`

1voto

chege Punkte 191

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() {
    }
}

0voto

kreilinger Punkte 111

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.com

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.

Powered by:

X