2014-12-18 22 views
6

Ho una pagina jsp nel progetto java e utilizzo dal codice sottostante l'estensione jsp nascosta dall'URL, ma carico anche la mia pagina con estensione jsp nell'URL. come prevenire questo? il mio codice:Come disabilitare l'accesso diretto alle pagine jsp?

<servlet> 
<servlet-name>myTest</servlet-name> 
<jsp-file>/testing.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
<servlet-name>myTest</servlet-name> 
<url-pattern>/test</url-pattern> 
</servlet-mapping> 

e l'URL di prova è: localhost/testing.jsp e la mia pagina di test è l'accesso.

risposta

0

Vorrei mappare l'url al servlet e quindi restituire il jsp dal servlet. ad esempio:

Nel web xml:

<servlet> 
    <servlet-name>testServlet</servlet-name> 
    <servlet-class>com.yourpackage.testServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>testServlet</servlet-name> 
    <url-pattern>/test</url-pattern> 
</servlet-mapping> 

In servlet:

request.getRequestDispatcher("testing.jsp").forward(request, response); 

Quindi il vostro modello di URL sarà/test ma la pagina testing.jsp verrà caricato. Spero che questo ti aiuti.

+0

grazie, ma in questo modo per ogni pagina jsp sarà un servlet, giusto? Non c'è altro modo? – Digicom

+0

Sì, potrebbe essere. Ma potenzialmente puoi mappare più di un URL allo stesso servlet e poi usare l'URL di richiesta per determinare quale jsp restituire. Io personalmente uso il framework Spring MVC per fare ciò che stai cercando di fare ed è reso molto più facile. – craigwor

4

Per una soluzione rapida, basta mettere le pagine JSP alla cartella WEB-INF (quindi non saranno direttamente accessibili) e definiscono loro in questo modo:

<servlet> 
     <description> 
     </description> 
     <display-name>hidden</display-name> 
     <servlet-name>hidden</servlet-name> 
     <jsp-file>/WEB-INF/hidden.jsp</jsp-file> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>hidden</servlet-name> 
     <url-pattern>/hidden</url-pattern> 
    </servlet-mapping> 

ma si dovrebbe considerare l'utilizzo di framework per farlo, come Struts2 o Spring.

+0

Non uso un framework. :-( – Digicom

+0

@Digicom Per la soluzione che ho fornito, non hai bisogno di alcun framework.Il Framework è solo un consiglio per il futuro da considerare. – Gas

2

È anche possibile utilizzare un filtro e negare l'accesso a jsps.

<filter> 
    <filter-name>JspFilter</filter-name> 
    <filter-class>my.JspFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>JspFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

Fitler:

public class JspFilter implements Filter{ 
    public void doFilter(ServletRequest request, ServletReponse response,     
      FilterChain chain) { 
    HttpServletRequest req= (HttpServletRequest) request; 
    req.getRequestDispather("error.jsp).forward(request,response); 
    } 
} 
-1

È possibile impedire l'accesso diretto ai file JSP aggiungendo quanto segue al web.xml, alterando il modello URL come richiesto.

<security-constraint> 
     <web-resource-collection> 
      <web-resource-name>JSP Files</web-resource-name> 
      <description>No direct access to JSP files</description> 
      <url-pattern>/pages/*</url-pattern> 
      <http-method>POST</http-method> 
      <http-method>GET</http-method> 
     </web-resource-collection> 
     <auth-constraint> 
      <description>No direct browser access to JSP files</description> 
      <role-name>NobodyHasThisRole</role-name> 
     </auth-constraint> 
    </security-constraint> 
+0

questo limita tutte le richieste anche io non posso accedere alla pagina di accesso che è come/pagine/login.jps –

Problemi correlati