Avatar billede bodhisatva Nybegynder
23. maj 2002 - 18:38 Der er 25 kommentarer og
2 løsninger

Login & isLoggedIn

Jeg står og skal bruge en "login-løsning" hvor ca. 4 brugere har rettigheder til at se sidernes indhold. Hvis man ikke er logget ind får man intet indhold at se.
Jeg forestiller mig en form i en frame i øverste højre hjørne med:
Brugernavn:
Password:
Submit - Reset

Siderne i de nedenstående frames tjekker så for om brugeren "boolean isLoggedIn == true" og hvis true, får man lov til at se den side man klikker ind på + kan indtaste oplysninger.

Det jeg søger er:

1. login-bean
2. login-form
3. eksempler på sider der tjekker om brugeren er logget ind eller ej, og udfaldet af begge tilfælde.


Avatar billede r9 Nybegynder
23. maj 2002 - 20:57 #1
du laver en loginCheck.jsp som ser sådan ud:

<%
    boolean loginStatus = DinJavaBønne.getLoginStatus();

    // Hvis boolean er false, skal brugeren sendes til index.jsp
    if (loginStatus == false) {
        response.sendRedirect("index.jsp");
    }
%>





Den inkluderer du på alle dine sider, undtaget på index.jsp

Sådan:
<%@ include file="loginCheck.jsp" %>



Så bliver brugere som ikke er logget ind, smidt tilbage til index.jsp
Avatar billede r9 Nybegynder
23. maj 2002 - 21:07 #2
Selve menuen øverst, som viser om  man er logget ind eller ej, kan evt. laves således:


Du laver en menu.jsp som ser sådan ud:

<%
String logIndStatus = "";
String brugernavn  ="";
if (DinLoginBønne.getLoginStatus()) {
    brugernavn = DinLoginBønne.getBrugernavn();
    logIndStatus = "Logget ind.";
}
else {
    logIndStatus = "Ikke logget ind!";
}


%>

<html>
<head>


<body bgcolor="#FFFFFF" text="#000000" link="#000000" vlink="#000000" alink="#000000" >
<table width="95%" border="0">
  <tr>

    <td width="22%" height="10">
      <div align="center"><font color="#000000"><font size="2"><b><font face="Arial, Helvetica, sans-serif">&nbsp;</font><font face="Arial, Helvetica, sans-serif"></font><font color="#000000"><font size="2"><b><font face="Arial, Helvetica, sans-serif"><a accesskey="l" rel="contents" href= "logaf.jsp"><u>L</u>og
        af</a> </font></b></font></font></b></font></font></div>
    </td>
    <td width="20%" height="10">
      <div align="center"><b>Status<font color="#000000">:</font><font color="#FF0000">
        <%=logIndStatus%></font> </b></div>
    </td>
    <td width="26%" height="10">
      <div align="center"><b>Brugernavn<font color="#000000">:</font> <font color="#FF0000">
        <%=brugernavn%> </font> </b> </div>
    </td>
  </tr>
</table>
<hr noshade width="95%" align="left">
</body>
</html>




Den inkluderer du på alle dine sider, undtaget på index.jsp.
(den skal inkluderes lige efter loginCheck.jsp)

Sådan:
<%@ include file="menu.jsp" %>
Avatar billede bodhisatva Nybegynder
23. maj 2002 - 22:26 #3
OK, hvordan ser login-bønnen så ud???
Avatar billede r9 Nybegynder
23. maj 2002 - 23:39 #4
Du laver en java klasse med DB adgang.

Så laver du et database opslag med det brugernavn & password som brugeren har indtastet.

noget ala: ("select id, loginnavn from brugere where loginnavn = '"+user+"' and password = '" + password + "'");

Hvis de indstatede matcher det i databasen sætter du en boolean til true, eller false.


Du kan så lave en metode: getLoginStatus(), som retunerer din boolean.


Du skal nok også lave en getBrugernavn() metode, som retunere brugernavnet på den person som er logget ind.
Avatar billede r9 Nybegynder
23. maj 2002 - 23:40 #5
rettelse i linje 5

ellers false
Avatar billede disky Nybegynder
24. maj 2002 - 15:12 #6
i toppen på alle dine sider inkluderer du en anden jsp side.

den jsp side kigger om der findes en bestemt attribute på session stacken, findes den ikke, skal brugeren smides hen på en login side.

Når brugeren er verificeret sættes den attribute på session stacken.

Det timer automatisk ud efter et stykke tid uden aktion.

Din form og bean må du selv lave, man lærer bedst java ved at lave tingene selv.
Avatar billede bodhisatva Nybegynder
25. maj 2002 - 09:49 #7
Jo, men lige netop til klassen med db-adgang har jeg lige et spm.

VAJ giver mig en fejl i min ConnectionManager: Method parameter type HttpServletRequest is missing



        public void processRequest(HttpServletRequest req)
    {
        user = req.getParameter(userId);
        passwd = req.getParameter(password);
        if(debug)
        {
            if(user == null || user.equals(""))
            {
                writer.writeDebug("parameter for brugernavn mangler");
            }
            if(passwd == null || passwd.equals(""))
            {
                writer.writeDebug("parameter for password mangler");
            }
        }
    }
Avatar billede r9 Nybegynder
10. juni 2002 - 23:59 #8
hvad er VAJ?
Avatar billede bodhisatva Nybegynder
11. juni 2002 - 20:35 #9
Visual Age for Java - IBM - Udviklingsværkstøj - Andre tools såsom websphere, websphere studio, Rational Rose MDL osv kan direkte integreres i dette...
Avatar billede r9 Nybegynder
11. juni 2002 - 20:39 #10
ok.

Er din ConnectionManager klasse en alm java klasse, eller en servlet?
Avatar billede bodhisatva Nybegynder
11. juni 2002 - 21:26 #11
Jeg kan vælge at bruge ConnectionManager fra bogen "Professional JSP" fra forlaget wrox. Ellers connecter jeg eksempelvis sådan:

Class.forName("org.gjt.mm.mysql.Driver");
--->via min .jsp-side
Avatar billede r9 Nybegynder
11. juni 2002 - 22:53 #12
Det er meget dumt at lave forbindelsen i din JSP side.

Brug i stedet en klasse til det.

Evt. disky's DbHandler, som kan findes her:
http://www.eksperten.dk/spm/119755
Avatar billede bodhisatva Nybegynder
11. juni 2002 - 23:26 #13
ja, jeg har godt set den en hel del gange herinde, men er det ikke det samme som at gøre følgende, fx. i min gæstebog:

1 - side der håndterer indtastninger fra form
--->

<%@page language="java" import="java.sql.*,java.util.*, disky.*" session="true" errorPage="MyError.jsp" isErrorPage="false" %>
<HTML>
  <HEAD>
    <TITLE>guestbookoutput.jsp</TITLE>
    </HEAD>

  <link rel="stylesheet" href="css.css" type="text/css">
<BODY>
  <center><h1>Gæstebogen</H1></CENTER>
 
  <%
Class.forName("org.gjt.mm.mysql.Driver");
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost/guestbook","","");


String Navn = request.getParameter("Navn");
String Email = request.getParameter("Email");
String Url = request.getParameter("Url");
String Overskrift = request.getParameter("Overskrift");
String Kommentar = request.getParameter("Kommentar");




Statement stmt = myConn.createStatement();
int rowsAffected = stmt.executeUpdate("insert into guestbook (Navn,Email,Url,Overskrift,Kommentar)  values('" + Navn  + "','" + Email  + "','" + Url  + "','" + Overskrift  + "','" + Kommentar + "')");
if(rowsAffected == 1)
{
%>

<h1>Dit "indlæg" er nu gemt.</h1>

<p>
<a href="guestbookinfo.jsp">Du kan her se alle indlæg i gæstebogen</a><br>
<a href="guestbook.jsp">nyt indlæg i gæstebogn</a><br>
<% }
else
{
%>
<h1>Sorry, men dit indlæg blev ikke opdateret... prøv igen... </h1>

<%
}
stmt.close();
myConn.close();
%>
 
 
 
 
 
 
 
 
</BODY>
</HTML>

2 - side der viser indlæg
--->

<%@page language="java" import="java.sql.*,java.util.*, disky.*" session="true" isErrorPage="false" %>
<jsp:useBean id="LavBR" scope="session" class="dss.LavBR">
<HTML>
  <HEAD>
    <TITLE>guestbookinfo.jsp</TITLE>
   
  </HEAD>

<link rel="stylesheet" href="css.css" type="text/css">
 
  <BODY>
  <center><h1>Indlæg i Gæstbogen</H1></CENTER>





  <%
Class.forName("org.gjt.mm.mysql.Driver");
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost/guestbook","","");
Statement stmt = myConn.createStatement();
ResultSet myResultSet = stmt.executeQuery("select * from guestbook");
if(myResultSet !=null)
{
while(myResultSet.next())
{

String Navn = myResultSet.getString("Navn");
String Email = myResultSet.getString("Email");
String Url = myResultSet.getString("Url");
String Overskrift = myResultSet.getString("Overskrift");
String Kommentar = myResultSet.getString("Kommentar");






%>



<table border="0">
<tr>
    <td width="10%" align="left">Navn</td><br>
    <td width="60%" align="left"><%= Navn %></td>
</tr>
<tr>
    <td width="10%" align="left">Email</td>
      <td width="60%" align="left"><%= Email %></td>
</tr>
<tr>
    <td width="10%" align="left">Url</td>
      <td width="60%" align="left"><%= Url %> </td>
</tr>
<tr>
    <td width="10%" align="left">Overskrift</td>
      <td width="60%" align="left"><%= Overskrift %></td>
</tr>
<tr>   
<td width="10%" align="left">Kommentar</td><br>
<td width="60%" align="left">  <%= LavBR.filtrer(Kommentar) %></td>
</tr>
<tr>   


<br><br>

<hr width="100%" size="2">




<%
}
}
stmt.close();
myConn.close();

%>
</table>


<a href="guestbook.jsp"> Tilbage til gæstebogen</a>

 
</BODY>
</HTML>
</jsp:useBean>

hvordan ville du da bruge disky's dbHandler her???
Avatar billede r9 Nybegynder
12. juni 2002 - 00:01 #14
Det er grimt at have al for meget java kode i sin Jsp side.
Hvad vil du f.eks. gøre hvis du skal indsætte noget i databasen på 10  forskellige Jsp sider?

Med dit nuværende design er du tvunget til at gentage en masse kode igen i andre Jsp sider.

Nemlig dette:
Class.forName("org.gjt.mm.mysql.Driver");
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost/guestbook","","");

Statement stmt = myConn.createStatement();
int rowsAffected = stmt.executeUpdate(sql-string);

Og hvad hvis du skifter driver eller databasenavn?
Så skal du igen rette i mange forskellige jsp sider.
Avatar billede bodhisatva Nybegynder
12. juni 2002 - 00:04 #15
Ja, det er korrekt, men jeg har ikke rigtig forstået at bruge dhhandleren, men måske lidt eksempel ville være på sin plads ?? ;)
Avatar billede r9 Nybegynder
12. juni 2002 - 00:14 #16
Du kunne bruge Disky's klasse sådan:


import java.sql.*;

public class DbHandler extends Object
{

    private Connection con=null;

    /** Creates new DataBase */
    public DbHandler()
    {
    }

    public boolean open(String dbDriverName, String dbClassName, String user, String pass)
    {
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return true;
    }

    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
    }

    public int doUpdate(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeUpdate(sql);
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return 0;
    }

    public ResultSet doQuery(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeQuery(sql);
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }
}




Fra din Jsp side kalder du nu klassen:

<jsp:useBean id="db" class="DbHandler" scope="session"/>

<HTML>
  <HEAD>
    <TITLE>guestbookoutput.jsp</TITLE>
    </HEAD>

  <link rel="stylesheet" href="css.css" type="text/css">
<BODY>
  <center><h1>Gæstebogen</H1></CENTER>

String Navn = request.getParameter("Navn");
String Email = request.getParameter("Email");
String Url = request.getParameter("Url");
String Overskrift = request.getParameter("Overskrift");
String Kommentar = request.getParameter("Kommentar");

int rowsAffected  = db.doUpdate("insert into guestbook (Navn,Email,Url,Overskrift,Kommentar)  values('" + Navn  + "','" + Email  + "','" + Url  + "','" + Overskrift  + "','" + Kommentar + "')");
%>
if(rowsAffected == 1)
{
%>


<h1>Dit "indlæg" er nu gemt.</h1>

<p>
<a href="guestbookinfo.jsp">Du kan her se alle indlæg i gæstebogen</a><br>
<a href="guestbook.jsp">nyt indlæg i gæstebogn</a><br>
<% }
else
{
%>
<h1>Sorry, men dit indlæg blev ikke opdateret... prøv igen... </h1>

<%
}

%>
   
</BODY>
</HTML>
Avatar billede r9 Nybegynder
12. juni 2002 - 00:17 #17
også skal man lige huske at åbne databasen.

Du kan gøre det fra Jsp-siden sådan:
db.open("org.gjt.mm.mysql.Driver","jdbc:mysql://localhost/DBnavn","ditbrugernavn","ditpassword");


Ellsr du kunne hardcode det i DbHandler klassen
Avatar billede r9 Nybegynder
12. juni 2002 - 00:23 #18
og når du skal søge:

Jsp-siden:

<%@page language="java" import="java.sql.*,java.util.*, disky.*" session="true" isErrorPage="false" %>
<jsp:useBean id="LavBR" scope="session" class="dss.LavBR">
<jsp:useBean id="db" class="DbHandler" scope="session"/>
<HTML>
  <HEAD>
    <TITLE>guestbookinfo.jsp</TITLE>
   
  </HEAD>

<link rel="stylesheet" href="css.css" type="text/css">
 
  <BODY>
  <center><h1>Indlæg i Gæstbogen</H1></CENTER>

<%
ResultSet myResultSet = db.doQuery("select * from guestbook");
if(myResultSet !=null)
{
while(myResultSet.next())
{

String Navn = myResultSet.getString("Navn");
String Email = myResultSet.getString("Email");
String Url = myResultSet.getString("Url");
String Overskrift = myResultSet.getString("Overskrift");
String Kommentar = myResultSet.getString("Kommentar");

%>

<table border="0">
<tr>
    <td width="10%" align="left">Navn</td><br>
    <td width="60%" align="left"><%= Navn %></td>
</tr>
<tr>
    <td width="10%" align="left">Email</td>
      <td width="60%" align="left"><%= Email %></td>
</tr>
<tr>
    <td width="10%" align="left">Url</td>
      <td width="60%" align="left"><%= Url %> </td>
</tr>
<tr>
    <td width="10%" align="left">Overskrift</td>
      <td width="60%" align="left"><%= Overskrift %></td>
</tr>
<tr>   
<td width="10%" align="left">Kommentar</td><br>
<td width="60%" align="left">  <%= LavBR.filtrer(Kommentar) %></td>
</tr>
<tr>   


<br><br>

<hr width="100%" size="2">


<%
}
}
%>
</table>


<a href="guestbook.jsp"> Tilbage til gæstebogen</a>
 
</BODY>
</HTML>
Avatar billede r9 Nybegynder
12. juni 2002 - 00:25 #19
På den måde kan du fra alle dine Jsp sider indsætte og søge i databasen via doUpdate() og doQuery() metoderne.
Man skal blot huske at kalde open() først.
Avatar billede bodhisatva Nybegynder
12. juni 2002 - 00:30 #20
OK, cool, men kunne man så ikke i forbindelse med ovenstående spørgsmål lave tre rækker med username, password, status (enten true eller false) i en database, og trække udfalde ud for status for brugenavnet, gemme den i en variabel?
Derefter har du jo et loginsystem hvor du på hver side der kræver at brugeren "isLoggedIn" får mulighed for at se og gøre ting i anden database, eksempelvis skrive et indlæg?
Ved "logOut" bliver "isLoggedIn" igen til false...
Avatar billede r9 Nybegynder
12. juni 2002 - 01:29 #21
Jo da. Du kunne jo udvide DbHandleren med følgende metoder.


//tjekker i DB
public void tjek(String brugernavn, String password) {

Vector v = duQuery(//SQL tjek om brugernavn og password er OK)   
if (v.size() == 1 )
LoggedIn = true;

}


//private var
private LoggedIn = false;


// retuner om brugeren er logget ind
public void getLoggedInStatus() {
   
return LoggedIn;
}




På din login.jsp side kalder du så tjek() på DbHandleren. Som parameter smider du brugernavn og password med.
Nu bliver "LoggedIn" sat til true hvis alt er OK



På ALLE andre jsp sider (pånær login,jsp) laver du så dette tjek:

<%
    boolean loginStatus = db.getLoggedInStatus();

    // Hvis boolean er false, skal brugeren sendes til login.jsp
    if (loginStatus == false) {
        response.sendRedirect("login.jsp");
    }
%>
Avatar billede r9 Nybegynder
12. juni 2002 - 01:32 #22
Nå så brugeren vil logge ud igen, kan man jo have denne metode på DbHandleren:

// kaldes når en bruger logger ud
public void setLoggedInStatus() {
   
LoggedIn = false
}
Avatar billede r9 Nybegynder
12. juni 2002 - 08:34 #23
kan det bruges?
Avatar billede r9 Nybegynder
13. juni 2002 - 13:23 #24
virker det?
Avatar billede bodhisatva Nybegynder
14. juli 2002 - 23:27 #25
Joh, hvor er mine manerer. Begge belønnes for et godt udført stykke support-arbejde. Jeg har prøvet at modificere begge forslag lidt, men bruger nu et eksempel fra bogen "Professional JSP" fra forlaget Wrox, som forøvrigt godt kan anbefales til alle nybegyndere. Der er rigtig mange gode ting af finde, og kører en rigtig fin tutorial for introduktion, omend lidt tung.
Avatar billede disky Nybegynder
14. juli 2002 - 23:48 #26
Det er en rigtig fed bog.
Avatar billede bodhisatva Nybegynder
15. juli 2002 - 00:03 #27
True Disky, men som dansker må du indrømme man savner en bog på sit modersmål...
Men ja, jeg har to andre bøger, men bruger kun denne, da den er nogenlunde nem at gå til, så endnu en gang kan den anbefales. Men du må også indrømme, den er lidt tung for en begynder?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester