# Tomcat bilder schützen



## Oni (10. Aug 2006)

Moin,

ich habe ein kleines problem mit der konfiguration von tomcat. ich habe eine jsp seite die mir bilder anzeigt. auf diese seite kommt man nur, wenn man sich einloggt. (über ein normales html-form mit db abgleich)
soweit so gut.

die bilder liegen unter  
/img/*.jpg

Problem ist nur das man auf die bilder über die url zugreifen kann. z.B.
www.meineSeite.de/img/erstesBild.jpg

wie kann ich das verhindern? möglichst ohne den einsatz von irgendwelchen Rolen in tomcat

ich habe es zwar geschafft diesen zugriff zu verhindern, aber dann klappte auch der zugriff ueber die sichere seite nicht mehr. 

gruß


----------



## KSG9|sebastian (10. Aug 2006)

pack die seiten nach web-inf/img


----------



## Oni (10. Aug 2006)

danke fuer den tip aber das funzt nicht. vielleicht liegt es an der tomcat-version? (5.5.17)


```
/
 - index.jsp
 - /WEB-INF/
       - image.jsp
       - /img/*.jpg
```

ich kann jetzt weder auf die seite noch auf die bilder zugreifen.


```
/
 - index.jsp
 - image.jsp
 - /WEB-INF/
       - /img/*.jpg
```


so auch nicht. 


ich arbeite mit absoluten pfaden also z.B:
/WEB-INF/img/*.jpg


----------



## HLX (10. Aug 2006)

Du hast deine JSP-Seiten als Servlets in der web.xml registriert?

Dann kannst du es über ein Servlet-Mapping in der web.xml versuchen. Gib als URL-Pattern die Dateiendung der Bilder an, dann erfolgt die Weiterleitung an eine JSP-Seite falls die URL diese Dateiendung enthält.


----------



## Oni (10. Aug 2006)

Ich habe in einem anderen Forum ein lösung gefunden.

Der Benutzer bekommt die Bilder nur angezeigt wenn er eine gültige Session hat und in der Session die Berechtigung gespeichert ist.

Beispiel:

*JSP-Seite:*

```
<html>
<body>
<%@ page session="true" %>
<% session.setAttribute("berechtigt","true");%>

[img]getImage?file=image.jpg[/img]

</body>
</html>
```


*web.xml*

```
<servlet>
    <servlet-name>SichereBilder</servlet-name>
    <servlet-class>test1.SafeImageLoader</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SichereBilder</servlet-name>
    <url-pattern>/getImage</url-pattern>
</servlet-mapping>
```


*Servlet*

```
package test1;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SafeImageLoader extends HttpServlet{

        private String path = "/euer/absoluter/path/zu/den/bildern/WEB-INF/img/";

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doPost(request,response);
        }


        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                HttpSession session = request.getSession();

                if(session != null){
                        String berechtigt = (String)session.getAttribute("berechtigt");
                        if(berechtigt.equals("true")){
                                String file = request.getParameter("file");
                                response.setContentType("image/jpg");
                                FileInputStream in = new FileInputStream(path + file);
                                OutputStream out = response.getOutputStream();
                                int readByte;
                                while((readByte = in.read()) != -1){
                                        out.write(readByte);
                                }
                                in.close();
                        }
                }
        }
}
```

Gruß


----------

