Zalogowanie/Wylogowanie JSP

0

Witam Zrobiłem na stronce system logowania po wpisaniu loginu i hasła są one przesyłane do serwletu, który łączy się z bazą danych sprawdza poprawność danych jeśli zostały poprawnie wprowadzone do sesji dodaję atrybut "name" i zostaje odesłana do użytkownika stronka z katalogu /WEB-INF/sr/index_1.jsp. Na tej stronie mam tez mały kodzik:

<% 
String name = (String) session.getAttribute("Pass-name");

    if(name.equals("null"))
    {
    //tutaj powrót do głównej strony
    }
    
%>

Mam też button Wyloguj ,który łączy się z servletem i wykonuje kod :

        HttpSession sesja = request.getSession();
        sesja.removeAttribute("name");
        Cookie[] d = request.getCookies();
        for(Cookie e : d)
        {
            e.setPath("/");
            e.setMaxAge(0);
        } 

No niby wszystko ładnie wraca do głównej stronki ale gdy w przeglądarce (FireFox) kliknę przycisk "Przejdź do poprzedniej strony" bez kłopotu przechodzę do strony, do której dostęp powinienem mieć tylko po zalogowaniu a sesję i cookie mam niby skasowane co wynika z kodu w/w. Może ktoś mi coś poradzi bo już sam nie wiem . Wielkie dzięki za pomoc

0

usuwasz "name" a sprawdzasz "Pass-name".

Poza tym nie jestem pewien czy w jsp wartosc null oznacza wpis "null" w stringu wiec daj moze

name != null
0

Probowales moze skorzystac ze standardowych mechanizmow jakie daja servlety? Chodzi mi tutaj o identyfikacje FORM, gdzie piszesz swoja stronke do logowania i do bledu logowania. Nastepnie, gdy sie zalogujesz, system sam automatycznie moze sprawdzac autoryzacje itp. Jak wywolasz session.invalidate(), to uzytkownik jest wylogowywany z systemu (czyli praktycznie to co ty robisz w servlecie wylogowywania).
Aby z tego skorzystac tak jak ty (uzytkownicy w bazie danych) wystarczy pod tomcata (zakladam ze korzystasz z tego co wszyscy, ale Jetty ma rowniez swoje opcje) podpiac JDBCRealm, zamiast standardowego MemoryRealm. Jak to zrobic jest w dokumentacji tomcata.
Wyglada na skomplikowane, ale nie jest, poza tym, jesli tak postapisz to: jestes zgodny ze specyfikacja, masz pozniej latwe zadanie aby ustawic ograniczenia dla uzytkownikow (Twoje wlasne podejscie jest niby prostsze na start, ale sadze ze jesli masz logowanie to i chcesz jakies ograniczenia narzucic kto gdzie moze isc?).
Pozdro.

0

JDBCRealm to by mnie urządzało nie musiałbym sam pisać autoryzacji. Tylko ma pytanie jak ograniczyć dostęp poszczególnych osób do zasobów np. mam admin,klient,gość jak to wygląda w JDBCRealm mam 3tabele users,roles , user_roles wiec gdzie i jak mam umieszczać informacje do jakich zasobów stron poszczególni użytkownicy maja dostęp (wpisywać adresy url) dzięki za wyśnienie

0

W servletach robi sie to w web.xml. Zasob jest to para metod http oraz url. Np, masz jakas aplikacje, i np masz jakies administracyjne stronki, np dodawanie uzytkownikow i chcesz aby tylko admini mogli to wykonac, w web xml robisz tak:

...
<security-role>
    <role-name>admin</role-name>
<security-role>
.... 
<security-constraint>
    <web-resource-collection>
      <web-resource-name>Add user resources</web-resource-name>
      <url-pattern>/addUser.html</url-pattern>
      <url-pattern>/addUser</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Username validator</web-resource-name>
      <url-pattern>/validator</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

Zauwaz ze musisz zadeklarowac w web.xml nazwy rol ktore wykorzystuje aplikacja (element security-role). Nastepnie przeanalizuj 2 podne przeze mnie przyklady. Pierwszy z nich dodatkowo wymaga, aby komunikacja byla tajna (szyfrowana) - w servletach nie musi to byc SSL, ale tomcat (i praktycznie wszyscy) uzywaja do tego SSL.
Pierwszy przyklad rowniez pokazuje ze ograniczenia nadaje sie na pare URL-metoda http. W przykladzie tylko dostep poprzez metode GET jest ograniczony. Jesli chcesz aby wszystkie metody HTTP1.1 (GET, POST, HEAD ..., servlety w wersji 2.5 pozwalaja na dowolne metody, np te z rozszerzenia webdav) byly ograniczane dla danego url to pomin element http-method, jak w przykladzie 2. Mozna miec wiecej niz 1 element http-method, moze rowniez byc pusty, co oznacza ze zadna metoda nie jest ograniczana, a zatem dostep jest bez ograniczen dla kazdego - nie ma w sumie sensu, chyba ze chcemy miec np zadeklarowane uzycie szyfrowania dla tego url.
Minus jaki ja osobiscie widze w tym jest to ze pary URL-metoda http maja ograniczenia nadawane statycznie, w web.xml. Czasami moze zajsc potrzeba aby robic to dynamicznie, np dodajesz role i chcesz zeby miala takie same mozliwosci co admin. Nie ma innej opcji jak edycja web.xml i restart aplikacji. Nie wiem jednak czy aktualnie to jest ci niezbedne.
To tak na szybko, bezpieczenstwo w servletach to w sumie jest troche do przeczytania, odsylam do specyfikacji lub tutoriali w necie. Bardzo fajnie moim zdaniem jest to opisane w Head First Servlets & JSP, edycja 2 (servlety 2.4, ale nic sie nie zmienilo w 2.5 pod tym wzgledem).
Pozdro.

0

Ok Dzięki za info muszę teraz znaleźć jak wygląda sytuacja z rolami i ogólnie zabezpieczeniami w Struts bo głównie na tym bazuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1