Anmeldeformular

Status
Nicht offen für weitere Antworten.
S

Sven

Gast
Hi Leute ich hätte da mal eine allgemeine Frage ich möchte eine Website erstellen in der sich der benutzer anmelden kann so wie man das von ebay.... her kennt? Wie müsste ich das schreiben das nur die Nutzer sich einloggen können die in der DB eingetragen sind nur einloggen können während Fremde Benutzer eine Meldung bekommen das sie nicht Mitglied sind??? Ich will das ganze mit Mysql verwenden?? Weis da jemand Rat?
 
S

Sven

Gast
Also ich muss für FH eine JSP Seite bauen die auf MYSQl zugreifen soll
 
S

Sven

Gast
Wau naja bin da noch am Anfang ich meine im prinzip müsste das Formularfeld mit dem Datenbanknamen verglichen werden um einen zugang des jeweiligen Kundne zu gewährleisten? Oder wie geht das richtig hab leider nicht vile informationen zu diesem thema gefunden
 
G

Guest

Gast
Ich dachte das wäre hier ein Forum wo man au mal en Tip bekommt mir is schon klar das man es selber machen muss aber immer diese Supersclauensprüche Google is dein Freund???
 

HoaX

Top Contributor
und was willst du nun von uns? sollen wir dir alles programmieren?

wenn du mal eine präzise frage stellen würdest könnte man dir auch antworten ...

schaffst du es nicht eine dynamische seite zu erstellen? weißt du nicht wie man mit einer mysql-datenbank kommuniziert? hängts am sessionhandling?

wenn du hellseher suchst probiers doch mal bei 9live ... ;)
 
S

sven

Gast
also ich will 2 textfelder erstellen in dem zum einen der benutzer sein pseudonym und im 2 sein passwort eingibt. Die pseudonym und die passwörter sind natürlich in derMysql DB gespeichert. wenn jetzt z,b jemand hergeht und sich einloggen möchte der nicht in der db hinterlegt ist dann soll zugang verweigert erscheinen.
 
G

Guest

Gast
Hi danke für en Link ist mir aber bischen zu kurzgefasst bin noch Anfänger in dem bereich muss mich da erstmal einarbeiten
 
G

Guest

Gast
Gibt es kein Java Code beispiel wiel bi dem Link seh ich nur SQL Code wie ich das ganze umsetzten soll versteh ich noch nicht so richtig?
 
G

Gast

Gast
Du hast immer noch nicht gesagt was dein problem ist. Also hier einen kleine Checkliste für dich:

Bekommst du ein simples HelloWorld in JSP hin?
Bekommst du Textfelder in JSP hin?
Kannst du die Daten aus Textfeldern auslesen?
Weisst du wie JDBC funktioniert?
Kannst du Anfragen an die MySQL DB mit JSP stellen?
Bekommst du die SQL Abfrage formuliert?

Wenn du alles mit Ja beantwortest dann solltest du fertig sein. Sonst sag uns endlich was du nicht hinbekommst, sonst können wir dir nicht helfen.
 
S

sven

Gast
Also HelloWorld bekom ich hin
Textformular erstellen auch:
Db Zugang funts au!

Hier is mein Formular
<form action="??jsp" method="post">


Ihr Pseudonym
<input type="text" name="pseudonym" size="10" maxlength="10" /></p>


Ihr Passwort
<input type="password" name="passwort" maxlength="6" /></p>
<input type="submit" name="druckknopfanmelden" value="Anmelden" />
</form>





Das mit dem auslesen da wird schwierig???
Und die SQL Abfrage hab ich auch meine Probleme ich denk mal ein normale Select Anweisung müsste reichen?

Also was ich bis jetzt hab ist meine MSQL DB die aus Benutzer und Passwort besteht.

Mein Problem ist wenn der benutzer jetzt in das textfeld seinen Namen und Passwort eingibt und anschließend auf anmelden klickt dann soll der Zugang bekommen wenn er in der DB festhinterlegt ist ist er es nicht dann soll eine fehlermeldung erscheinen die sagt Zugang verweigert.


Ich weis nicht wie ich die Textfeldeingaben mit der DB vergleichen soll so das geprüft werden kann ob der Name in DB ist oder nicht?
Hoffe ihr versteht wie ich das meine?
 
G

Guest

Gast
Also ich versthe nicht wohin man diese Datei laut dem Link anlegen soll?
http://tomcat.apache.org/tomcat-3.3-doc/JDBCRealm-howto.html

<JDBCRealm"
debug="99" driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost/authority?user=test;password=test" userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />


http://www.netbeans.org/kb/articles/security-webapps.html

The basic users and roles for the Tomcat server are defined in tomcat-users.xml. You can find tomcat-users.xml in your <USER_DIR>\apache-tomcat-5.5.17_base\conf directory. Your tomcat-users.xml file should like similar to this:?

<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="ide" password="(generated password)" roles="manager,admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>




Sorry echt das ich so doof Frage aber das is mein erster Versuch in diesem Themenbereich
 

Joker

Bekanntes Mitglied
das JDBCRealm kommt in die server.xml, die liegt zusammen mit wie die tomcat-users.xml (conf Ordner deiner tomcat installation). Bei der Authentifizierung per Datenbankrealm spielen die Werte aus der tomcat-users.xml dann keine Rolle mehr, die Infos die dort drinstehen befindetet sich stattdessen ja in der DB.
 
S

sven

Gast
MMH also ich hab nun folgendes erstellt:


1 Login.jsp die aus folgenden Code besteht :<%@ 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>Insert title here</title>
</head>
<body>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<form action="j_security_check" method="POST">
Username:<input type="text" name="j_username">

Password:<input type="password" name="j_password">
<input type="submit" value="Login">
</form>
</body>
</html>



2. Login Error.html

<html>
<head>
<title>Login Test: Error logging in</title>
</head>
<body>
<h1>Error Logging In</h1>


</body>
</html>




3.pageA.html
<html>
<head>
<title>Admin secure area</title>



</head>
<body>
<h1>Admin secure area</h1>
</body>
</html>







4.U.html

<html>
<head>
<title>User secure area</title>
</head>
<body>
<h1>User Secure Area</h1>
</body>
</html>









Dann hab ich in my Jbos in die XML Datei folgenden Code reinkopiert::



<?xml version="1.0" encoding="UTF-8"?>

<JDBCRealm"
debug="99" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/authority?user=test;password=test" userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />




Und zu guter letzt eine Java Datei die die VB zur DB erzeugt:







import java.sql.SQLException;
import java.util.HashMap;






public class DBZugriff {


private java.sql.Connection dieVerbindung;
private final String DBUSER = "root";
private final String PASSWORD = "";
private final String DBNAME = "authority";
String url = "jdbc:mysql://localhost/"+DBNAME+"?user="+DBUSER+"&password="+PASSWORD;




//Konstruktor
public DBZugriff()
{

try
{ // Die verbindung zur DB wird aufgebaut
// Erzeuge, laden und registrieren des Treibers
// Der Name des Treibers lautet org.gjt.mm.mysql.Driver

Class.forName("com.mysql.jdbc.Driver").newInstance();
// Hole eines Connection Objects
//die DB heißt dbbenutzer
dieVerbindung = java.sql.DriverManager.getConnection(url);


}


catch(Exception ex)
{



ex.printStackTrace();
}


}


// Lesende Operation
public java.sql.ResultSet leseDB()

{
java.sql.Statement statement;
// Liefere Tabelle
java.sql.ResultSet tabelle;
try
{

// Abfrage der DB
statement = dieVerbindung.createStatement();
//Ausführen der SQL Anweisung
tabelle = statement.executeQuery("Select * FROM benutzer");
// Rückgabe des Ergebnisses vom Typ ResultSet
return tabelle;



}
catch (java.sql.SQLException e3)
{

System.out.println ("SQLException:" + e3.getMessage());
}
return null;
}

//Schreibene Operationen
public synchronized void schreibeDB(String pseudonym,String passwort)
{
String benutzernrString = "Leer";
int benutzernr = 0;
java.sql.Statement statement = null;
java.sql.ResultSet tabelle = null;

try {

//Statement erzeugen
statement = dieVerbindung.createStatement();

// Operation ausführen
tabelle = statement.executeQuery("SELECT MAX ( BENUTZERNR)FROM BENUTZER");

// Zeiger auf 1. Element positionieren
tabelle.next();

// 1. Element der 1. Spalte lesen
benutzernr = tabelle.getInt(1);

// benutzernr um 1 erhöhen

benutzernr++;
benutzernrString = Integer.toString(benutzernr);

// neuen Eintrag im String values zwischenspeichern

String insert = "INSERT INTO benutzer ( BENUTZERNR,PSEUDONYM, PASSWORT)";
// neuen Wert in Stringvaules zwischenspeichern

String values = "VALUES('" + benutzernrString + "','" + pseudonym + "','" + passwort + "')";

// DB Operationen ausführen d.h. Daten in Tabelle eintragen


statement.executeUpdate(insert + values);
}
catch (java.sql.SQLException e3)
{
System.out.println("SQLException:" + e3.getMessage());

}


finally
{

// DIe Close Operation kann ebenfalls eine Ausnahme erzeugen
try {
tabelle.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

}

}

public void pruefe()
{

}

public static void main (String args [])
{
DBZugriff meinzugriff = new DBZugriff();
System.out.println("DB Zugriff erfolgreich");
} }






Und das ist meine DB Authority:
create table users
(
user_name varchar(15) not null primary key,
user_pass varchar(15) not null
);


create table roles
(
role_name varchar(15) not null primary key
);

create table user_roles
(
user_name varchar(15) not null,
role_name varchar(15) not null,
primary key( user_name, role_name )
);


Und trotzdem kommt immer eine fehlermeldung und das ganze funtz einfach net saß die ganze nacht dran und komm auf kein sinnvoles Ergebnis.
 
G

Guest

Gast
Kann man das ganze nicht einfach mit einer If Anweisung in der DB Zugriff kontrollieren lassen??
 

Joker

Bekanntes Mitglied
Anonymous hat gesagt.:
Kann man das ganze nicht einfach mit einer If Anweisung in der DB Zugriff kontrollieren lassen??

Das geht schon, ist allerdings sehr viel aufwendiger als wenn man das den Appserver erledigen lässt. (wenn man es mal gemacht hat ist das eine Sache von <5min).

@sven.: Schau dir das Beispiel von Netbeans an (auch wenn du eine andere IDE benutzt siehst du ja trotzdem wie es gemacht wird, besonders wichtig, und ich denke das ist was bei dir bisher fehlt, sind die <login-config> und <security-constraint> Tags in der web.xml). Das einzige was du vom Beispielcode verändern müsstest wäre den JDBCRealm Eintrag in die server.xml zu kopieren und mit deinen Zugangsdaten zu versehen. Die Verbindung zur Datenbank erledigt der AppServer automatisch, da musst du selbst gar nichts machen (der JDBC Treiber muss natürlich bei den Libs vorhanden sein).
 
G

Guest

Gast
Hi danke Joker für deine Antwort ! Aber welche Configs und Contents muss ich in die WEB.xml integrieren ??
 
S

Sven

Gast
so jetzt so langsam versteh ich das ganze allerdings komme ich immer auf die error.jsp wenn ich das hier ausführen möchte: Ich denk mal der fehler in der REALM Syntax liegt was ich da hin aber explizit reinschrieben muss is mir en rätsel laut http://tomcat.apache.org/tomcat-3.3-doc/JDBCRealm-howto.html müsste mein code unten ausreichen geht leider trotzdem nicht.


In meine web.xml hab ich nun folgendes reinkopiert:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>A</display-name>
<description>
A Simple test
</description>

<security-constraint>
<display-name>A Configuration Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<!-- Define the context-relative URL(s) to be protected
In dem Fall wollen wir einfach unsere index.html schützen.
-->
<url-pattern>*.html</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>authUser</role-name>
</auth-constraint>
</security-constraint>


<login-config>
<auth-method>FORM</auth-method>
<realm-name>A Server Configuration Form-Based Authentication Area</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>

<security-role>
<description>
The role that is required to log in to the A Application
</description>
<role-name>authUser</role-name>
</security-role>
</web-app>




Als index.html:

<!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>Insert title here</title>
</head>
<body>
Hallo!
</body>
</html>


Als server.xml

<?xml version="1.0" encoding="UTF-8"?>

<Realm className="org.apache.catalina.realm.JDBCRealm"

debug="99" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/authority?user=test;password=test" userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name" />

als error.jsp

<%@ 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>Insert title here</title>
</head>
<body>
error!
</body>
</html>

und schließlich
login.jsp
<%@ 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>
<title>Login</title>
</head>
<body>
<form action='<%= response.encodeURL("j_security_check") %>' method="POST">
Username:<input type="text" name="j_username"/>

Password:<input type="text" name="j_password"/>

<input type="submit" value="login"/>
</form>
</body>
</html>
 

Joker

Bekanntes Mitglied
ich tippe einfach mal auf eine leere user_table. Anmelden können sich natürlich nur die dort eingetragenen Benutzer ;)
 
G

Gast

Gast
wäre ja nett, wenn du das nächste mal CODE-Tags verwenden würdest oO
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben