# Anmeldeformular



## Sven (8. Dez 2007)

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?


----------



## HLX (8. Dez 2007)

Was kannst du denn schon? Schonmal mit Servlet Containern gearbeitet?


----------



## maki (8. Dez 2007)

Schon mal mit Java gearbeitet?


----------



## Ocean-Driver (8. Dez 2007)

überhaupt schonmal programmiert?


----------



## Joker (8. Dez 2007)

du solltest vielleicht etwas mehr Infos rauslassen 

für tomcat wäre wohl das hier:
http://tomcat.apache.org/tomcat-3.3-doc/JDBCRealm-howto.html

das gesuchte. Für die anderen Server findet sich unter dem Stichwort JDBCRealm sicher auch was.


----------



## Sven (8. Dez 2007)

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


----------



## Gast (8. Dez 2007)

Na perfekt, dann weißt du doch alles.


http://www.mitlinx.de/webservices/howto_tomcat_4_0_installieren.htm
http://daff.neyeon-digital.de/blog/wp-content/uploads/2007/02/tomcatapachehowto.pdf

google dein helfer in der not


----------



## Sven (9. Dez 2007)

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


----------



## Guest (9. Dez 2007)

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 (9. Dez 2007)

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 ...


----------



## sven (9. Dez 2007)

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.


----------



## Joker (9. Dez 2007)

wie das funktioniert steht doch in meinem Link 
http://tomcat.apache.org/tomcat-3.3-doc/JDBCRealm-howto.html

beschrieben (der handelt zwar von einer Uraltversion, funktioniert aber auch noch mit 6.0). In den JavaEE Beispielen von Netbeans gibts dazu glaube ich sogar ein fertiges Beispiel (JSF JPA heißt das Projekt glaube ich).


----------



## Guest (9. Dez 2007)

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


----------



## Guest (9. Dez 2007)

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?


----------



## Joker (9. Dez 2007)

hier ist noch einer zum Nutzerauthentifizierung:

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

wenn du das mit dem anderem Link kombinierst sollte das relativ einfach machbar sein.


----------



## Gast (9. Dez 2007)

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.


----------



## sven (9. Dez 2007)

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?


----------



## Guest (9. Dez 2007)

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 (9. Dez 2007)

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.


----------



## sven (10. Dez 2007)

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.


----------



## Guest (10. Dez 2007)

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


----------



## Joker (10. Dez 2007)

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).


----------



## Guest (10. Dez 2007)

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


----------



## Sven (10. Dez 2007)

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 (11. Dez 2007)

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


----------



## Gast (11. Dez 2007)

wäre ja nett, wenn du das nächste mal CODE-Tags verwenden würdest oO


----------

