tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1403
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    May 2007
    Ort
    Krefeld (NRW)
    Beiträge
    19
    Hallo zusammen,

    Ich such mir schon nen Wolf, finde aber nichts zu meiner Frage.

    Also, die Situation ist, ich habe eine Abfrage von j_security_check (die Daten kommen aus einer MySQL-DB), funktioniert auch alles ganz prima. Ich habe zwei Rollen, student und pruefer.

    In der login.jsp gibt es diesen j_security_check, der dann auf die index.jsp verweist. Auf der index.jsp möchte ich dann allerdings, je nach Rolle des Benutzers, etwas anderes anzeigen lassen (das sind jeweils Links, die auf verschiedene Seiten verweisen).

    Ich bräuchte also einen Mechanismus, der eins der folgenden Anforderungen erfüllt:

    a) Die Möglichkeit, den j_username irgendwie auf die index.jsp zu übertragen - aber ich fürchte, das geht nicht so einfach, weil jegliche Parameter in meiner Webanwendung versteckt sind. Egal was ich mache, nichts kommt an... (Bsp.: session.setAttribute(...)). Ich weiß nicht obs an j_security_check liegt oder daran dass ich zu doof bin für sowas, bin noch relativ neu im Thema... Hier das, was ich beispielsweise in der login.jsp ausprobiert hatte:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <FORM METHOD=POST ACTION=j_security_check>
    <table>
    <tr>
    <td>
    Benutzername:</td><td>
    <input type="text" name="j_username" value="" size=20 maxlength=50></td>
    <%
    String lstrName = (String) request.getParameter("j_username");
    session.setAttribute("name", lstrName);
    %>
    </tr><tr><td>Passwort:</td><td>
    <input type="password" name="j_password" value="" size=20 maxlength=50></td></tr><tr><td>
    <input type="submit" value="login"/></td></tr>
    </table>
    </form>

    b) Die Möglichkeit, direkt Rollen auszulesen, denn j_security_check ist ja eigentlich auch rollenbasiert. Ich hatte etwas gesehen im Internet, dass man die jeweiligen rollenbasierten Seiten in eigene Verzeichnisse steckt, würde das aber gerne vermeiden, weil das beim Ausprobieren auch nicht wirklich geklappt hat, und wenn es doch keine andere Möglichkeit gibt, würde ich gerne wissen wie das nun wirklich geht und wie man die Rollen abfragt und so.

    Hier nochmal die Details, was ich verwende:

    - MySQL 5.1 Datenbank
    - Tomcat6
    - Eclipse Galileo
    - JRE 6
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    schau mal hier:
    http://www.tutorials.de/forum/enterp...chanismus.html

    Außerdem:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
            HttpServletRequest request = ...;
            Principal principal = request.getUserPrincipal();
            String userName = principal.getName();
            //...
            if(request.isUserInRole("Admin")){
                //...
            }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Registriert seit
    May 2007
    Ort
    Krefeld (NRW)
    Beiträge
    19
    Hallo Tom,

    Den Link kannte ich schon, danke. Der Java-Code wird mir aber sicherlich helfen! Ich werde das mal ausprobieren, dankeschön!
     

  4. #4
    Registriert seit
    May 2007
    Ort
    Krefeld (NRW)
    Beiträge
    19
    Soooo...

    Die Weiterleitung auf die übergeordneten Ordner /student und /pruefer funktioniert nun prima. Allerdings habe ich scheinbar immer noch einen Denkfehler. Und zwar habe ich eine Anzahl JSPs in diesen Ordnern, und ich möchte gerne eine "Ausloggen"-Funktion einfügen, in etwa so:

    HTML-Code:
    <a href="logout.jsp">Ausloggen</a>
    Die logout.jsp soll allerdings nur einmal vorkommen, und zwar im WebContent-Ordner, also im Root-Ordner, dort wo auch die index.jsp und die login.jsp liegt, nicht in den Ordnern /pruefer oder /student. Das geht aber nicht, da er mit dem obigen Codebeispiel das als /pruefer/logout.jsp (Beispiel) interpretiert, wenn man sich gerade im Prüferverzeichnis befindet. Also habe ich die logout.jsp kopiert und jeweils in die Ordner /pruefer und /student eingefügt. Damit kommt der Security-Check durcheinander, und sobald man sich ausloggt, herrscht Chaos, wenn man sich dann wieder einloggt. Man wird dann nach jedem Seitenwechsel nach dem Passwort gefragt.

    Ich habe den Tipp befolgt, überall einen "/" vor den Link zu schreiben, also beispielsweise:

    HTML-Code:
    <a href="/logout.jsp">Ausloggen</a>
    Damit, so laut Tutorial, würde der Browser das immer "richtig" interpretieren. Das hat aber ganz und gar nicht geklappt, dann wird die Seite gar nicht mehr gefunden.

    Die Lösung ist sicher total einfach, aber ich bin etwas ratlos und würde mich über jeden Hinweis freuen.

    Liebe Grüße
    Kerstin
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    versuchs mal in /prüfer /student mit ../logout.jsp

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    Registriert seit
    May 2007
    Ort
    Krefeld (NRW)
    Beiträge
    19
    Das funktioniert leider auch nicht.

    Fehlermeldung:

    HTML-Code:
    description The requested resource (/logout.jsp) is not available.
    Er versucht dann, auf http://localhost/logout.jsp zuzugreifen und nicht wie erwartet auf http://localhost/projektname/logout.jsp. Ändere ich den Code auf

    HTML-Code:
    <a href="http://www.tutorials.de/forum/projektname/logout.jsp">Ausloggen</a>
    muss ich zweimal auf den Link drücken, damit er "ausloggt", also in etwa der gleiche Effekt wie mit "logout.jsp" (also ohne ../ oder /). Würde ich dann versuchen, mich wieder einzuloggen, ist wieder Chaos angesagt (Effekt wie im letzten Posting).

    Liebe Grüße
    Kerstin
    Geändert von silmepurpurdrache (11.03.10 um 15:14 Uhr)
     

  7. #7
    Registriert seit
    May 2007
    Ort
    Krefeld (NRW)
    Beiträge
    19
    Hallo,

    Ich glaube ich habe gefunden, woran es liegt.

    Hier die logout.jsp:

    HTML-Code:
     <% 
     session.invalidate();
     request.getRequestDispatcher("index.jsp").forward(request,response);
     %>
    Dann die index.jsp, die eigentlich dafür da ist, auf die Unterverzeichnisse weiterzuleiten:

    HTML-Code:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Anmeldung</title>
    </head>
    <body>
    <br/>
    <% if (request.isUserInRole("student")) {%>
    <jsp:forward page='/student/index.jsp'/>
    <% } 
    else if (request.isUserInRole("pruefer")) {%>
    <jsp:forward page='/pruefer/index.jsp'/>
    <%} %>
    
    </body>
    </html>
    Es ist klar, dass er dann durcheinander kommt. Man ist eigentlich nicht mehr eingeloggt, aber die Anwendung versucht trotzdem, Informationen über die Rolle des aktuellen Benutzers herauszufinden, um dann weiterzuleiten.

    Jetzt ist die Frage, wie ich weiter vorgehen soll. Ich kann in der logout.jsp nicht auf die login.jsp verweisen (um einen neuen Login zu erzwingen) und auch keine zweite index.jsp erstellen (Bsp. index2.jsp), denn dann müsste ich - meiner bescheidenen Meinung nach - einen neuen j_security_check in der index2.jsp machen, und das ist nicht erlaubt. Eine Idee von mir wäre, in der index.jsp sowas einzufügen wie
    HTML-Code:
    <% else { 
           // neu einloggen
          login();
    %>
    Aber man darf nicht auf die login.jsp verweisen wenn ich das richtig verstanden habe. Jemand eine Idee?



    -----------------------------------
    Okay. In einem anderen Forum steht, man soll in der logout.jsp einfach auf eine Seite in dem gesicherten Bereich, d.h. in einem der Unterverzeichnisse, verweisen. Dann würde man aufgefordert werden, das Passwort neu einzugeben und alles ist prima. Also habe ich folgendes in der logout.jsp gemacht (wie gesagt, ich habe zwei Rollen, also sollte ich das auch berücksichtigen in meinem Code):

    HTML-Code:
     <% 
     //session.invalidate();
     String check = "";
     if (request.isUserInRole("pruefer")) {
    	 check = "pruefer";
     }
     if (request.isUserInRole("student")) {
    	 check = "student";
     }
     request.getSession().invalidate();
     if (check == "pruefer") {
     	request.getRequestDispatcher("/pruefer/index.jsp").forward(request,response);
     }
     else if (check == "student") {
    	request.getRequestDispatcher("/student/index.jsp").forward(request,response);
     }
     %>
    Derselbe Effekt wie immer, Chaos pur. Man muss zweimal ausloggen, um sich dann nicht mehr ordentlich anmelden zu können. *grml*.

    Ich untersuche das noch weiter und halte euch auf dem Laufenden.

    --------------------------
    Bei näherer Betrachtung geht das natürlich auch nicht. Ich MUSS einfach auf die index.jsp im obersten Verzeichnis, ich möchte ja, dass sich, nachdem ein Prüfer sich ausgeloggt hat, auch mal ein Student einloggen kann. Ich bin langsam mit meinem Latein am Ende (welch Überraschung).
    Geändert von silmepurpurdrache (12.03.10 um 10:30 Uhr) Grund: Weitere Informationen verfügbar
     

Ähnliche Themen

  1. DLL Parameterübergabe
    Von Cromon im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 14.08.09, 19:25
  2. JAAS mit Tomcat j_security_check Weiterleitung
    Von Herzog77 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 4
    Letzter Beitrag: 24.03.08, 14:33
  3. CGI Parameterübergabe ?
    Von ert18 im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 5
    Letzter Beitrag: 20.12.07, 10:12
  4. Problem mit "Rollenbasierte Sicherheit"
    Von caboom im Forum PHP
    Antworten: 7
    Letzter Beitrag: 06.10.07, 13:29
  5. Parameterübergabe
    Von nanostruct im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 15.08.07, 09:54