Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java - pitanje u vezi sesija

[es] :: Java :: Java - pitanje u vezi sesija

[ Pregleda: 2844 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ŽIKI

Član broj: 57957
Poruke: 145



+41 Profil

icon Java - pitanje u vezi sesija31.10.2013. u 12:25 - pre 126 meseci
Pozdrav, relativno sam nov u javi pa me interesuje da li je ovo ok.

Pravim neku web aplikaciju, imam jedno 8-10 .jsp strana, i sad sam napravio login formu.
Spojio sam sa bazom i to radi, interesuje me sad oko sesija(bez cookie) da li postoji neki drugi/bolji način.
Kada npr. posle uspešnog logina u LoginServlet-u definišem sesiju i redirekciju:
Code:

    HttpSession session = request.getSession(true);
                session.setMaxInactiveInterval(30*60);
                session.setAttribute("username", rs.getString("username"));
                            response.sendRedirect("prvaStrana.jsp");

sad ne želim da mogu direktno da ukucam NekaAdresa/prvaStrana.jsp i da mi izbaci nju, već login stranu. Znači da ne mogu direktno da pristupim url-u, već ako nisam ulogovan da me baci na login stranu.
To sam postigao tako što sam ubacio ove 2 linije koda na prvaStrana.jsp.
Code:

if(session.getAttribute("username") == null){
    response.sendRedirect("login.jsp");}

Da li se to tako radi, sad na svaku novu stranu ubacujem ove 2 linije koda?
 
Odgovor na temu

nemnesic
nemnesic
Software Developer
Vranje Florida

Moderator
Član broj: 44355
Poruke: 802
*.dynamic.sbb.rs.



+64 Profil

icon Re: Java - pitanje u vezi sesija31.10.2013. u 12:37 - pre 126 meseci
Pitanje: gde ti se nalaze jsp strane kada mozes da im direkto pristupis iz browser-a?

Common practice je da unutar servlet-a presetnes taj request i proveris login session, i onda redirectujes login stranu ili prvustranu.

Tako ako mozes postavi ovde project file structure ili slobodno upload-uj ceo project pa da pogledam.
 
Odgovor na temu

ŽIKI

Član broj: 57957
Poruke: 145



+41 Profil

icon Re: Java - pitanje u vezi sesija31.10.2013. u 17:53 - pre 126 meseci
Sve radim na localhostu, pišem u Java EE Eclipse, vrti se Apache Tomcat 7.0, + PostgreSQL baza.
Evo primera koda, sve je osnovno, verifikacije i sigurnost ću kasnije, ovo mi je samo da bi razumeo kako radi, pošto prvi put koristim servlet.

login.jsp
Code:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
    <center>
        <form action=LoginServlet>
            <table>
                <tr>
                    <th colspan="2">Login Form</th>
                </tr>
                <tr>
                    <td>Enter your UserId:</td>
                    <td><input type=text name=userId></td>
                </tr>
                <tr>
                    <td>Enter your Password:</td>
                    <td><input type=password name=pwd></td>
                </tr>
                <tr>
                    <td colspan="2" align="right"><input type=submit value=submit></td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>


LoginServlet.java
Code:
package servlet.proba;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String userId = request.getParameter("userId");
        String password = request.getParameter("pwd");
        String searchQuery = "select * from users where username='" + userId + "' AND password='" + password + "'";
        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Gde ti je PostgreSQL JDBC Driver?");
            e.printStackTrace();
            return;
        }
        
        try {
            Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/myDb", "postgres", "");
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(searchQuery);
            boolean isEmpty = rs.next();
            if (!isEmpty) {
                // redirect to error page
                response.sendRedirect("LoginFail.jsp");
            } else if (isEmpty) {
                // fetch the session from request, create new session if session
                // is not present in the request
                HttpSession session = request.getSession(true);
                session.setMaxInactiveInterval(30*60);
                session.setAttribute("username", rs.getString("username"));
                // redirect to success page
                 response.sendRedirect("izbor.jsp");  //LoginSuccess
            }
        } catch (SQLException e) {
            System.out.println("SQLException occured: " + e.getMessage());
            e.printStackTrace();
        }
        
}
}


izbor.jsp
Code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Izbor klijenta</title>
</head>
<body>
<% if(session.getAttribute("username") == null){
    response.sendRedirect("login.jsp");}%>
   
<form action=upload.jsp >
    <input type="submit" value="KLIJENT1" style="height:150px; width:250px">
</form>
</body>
</html>


Znači ukoliko stavim ove 2 linije koda, uvek me u browser-u vraća na login stranu ako nisam ulogovan. U suprotnom mogu da pristupim bilo kom fajlu samo kucajući putanju.
Prikačeni fajlovi
 
Odgovor na temu

iglig
Igor Iglič
Beograd, Srbija

Član broj: 300685
Poruke: 80



+16 Profil

icon Re: Java - pitanje u vezi sesija01.11.2013. u 02:42 - pre 126 meseci
Nema potrebe da stalno kopiraš kod iz jedne JSP u drugu, u ovom primeru su to samo dve linije, šta ćeš kada ih bude 100-200-300?
U svaki JSP koji odgovara SK-u prijavljenog korisnika možeš dinamički dodati neku drugu JSP stranu, koja može a i ne mora sadržati HTML kod. U praksi prijavljeni korisnik uvek ima pristup kontroli za odjavu sa sistema ili vidi prikazano korisničko ime pod kojim je prijavljen, te je stoga praktično smestiti te komponente u zaglavlje stranice ili poseban DIV panel sa strane a koji će zgodno biti sadržan u "header_korisnik.jsp", što svakoj opisanoj stranici govorimo sledećim kodom:
Code:
<div id="header">
              <jsp:include page="header_korisnik.jsp"/>
        </div>

header_korisnik.jsp
Code:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" errorPage="greska.jsp" 
    import="moj.sistem.beans.BeanKorisnik"%>
<div id="header">
            <p id="prijavljen">
                Prijavljen korisnik:
                <%BeanKorisnik trenutniKorisnik = ((BeanKorisnik)(session.getAttribute("trenutniKorisnik")));%>
                <%=trenutniKorisnik.getIme() + " "+ trenutniKorisnik.getPrezime()%>
            </p>
            <div id="odjava">
                <form action="odjava">
                    <input type="hidden" id="sk" name="sk" value="Odjavi se">
                    <input type="submit" value="Odjavi se">
                </form>
            </div>
        </div>

Svaka stranica sadrži posrednu proveru prijavljenog korisnika, tjst izbaciće grešku za korisnike koji nemaju dozvolu pristupa, koji su se odjavili (request.getSession().invalidate(); ) ili kojima je istekla sesija. Ovu situaciju obrađujemo sa "errorPage="greska.jsp"" i time preusmeravamo takve zahteve na greska.jsp:
Code:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Došlo je do greške!</title>
</head>
<body>
<% response.setHeader("Refresh", "10;url=kontrolerLogin"); %>
    <center>
        <h1>Niste prijavljeni na sistem ili je došlo do greške. </h1>
        <h3>Kontaktirajte tehničku podršku ukoliko se greška ponovi.</h3> 
    </center>
</body>
</html>

Posle 10s klijent automatski pravi nov zahtev servletu koji obrađuje putanju "kontrolerLogin" i potom preusmerava korisnika na odgovarajuću stranicu.

Obrati pažnju na to da prijavu korisnika obavezno radiš u doPost a ne u doGet, prvenstveno zbog toga što se sa doGet lozinka ispisuje u adresnom baru.
U sesiji čuvaj objekat tipa (klase) Korisnik jer je bezveze da stalno prosleđuješ brdo korisničkih atributa.
select * from... u kombinaciji sa Statement objektom i nekoliko navodnika vraća celokupnu tabelu. <eeek!> Umesto ovoga koristi PreparedStatement i izričito navedi koje kolone biraš, dakle SELECT username, password...

Kasno je pa sam stoga napisao nepovezane odgovore ali snaćićeš se već.
 
Odgovor na temu

nemnesic
nemnesic
Software Developer
Vranje Florida

Moderator
Član broj: 44355
Poruke: 802
*.dynamic.sbb.rs.



+64 Profil

icon Re: Java - pitanje u vezi sesija01.11.2013. u 10:03 - pre 126 meseci
Zasto ne prebacis jsp u WEB-INF npr WEB-INF/jsp
Onda one nisu public accessible.
I naravno moras da kzes servletima gde su jsp

Ovako izbegavas da ubaciujes logic unutra JSP.


Drugo resenje bi bilo da se igras sa filterima. Ali mislim da je prvo bolje.
 
Odgovor na temu

[es] :: Java :: Java - pitanje u vezi sesija

[ Pregleda: 2844 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.