JSF Überprüfen der Session ID in JSF und JAVA

Dominik1986

Mitglied
Hallo alle zusammen,

Ich arbeite zur Zeit etwas mit JSF und bin dabei eine Login-Page zu entwerfen. Ich prüfe hierbei ob Benutzername und Passwort korrekt sind, wenn ja kommt der Benutzer auf die nächste Seite, wenn nicht wird ihm eine Error-Page angezeigt.
Meine Frage ist nun, wie ich die Seite auf die ich mittels erfolgreichen Login schützen kann? Also zum Beispiel Link kopieren und dann in einem neuen Fenster reinkopieren soll den Nutzer dann wieder auf die Login-Page leiten.
Wie kann man das am Einfachsten bewerkstelligen?

Danke und Gruß,

Dominik
 

Dominik1986

Mitglied
Die Anwendung in unterschiedliche Bereiche bzw. Ordner einteilen (public/private) -> entweder was eigenes

viewexpiredexception

access-control-using-phaselistener.html

oder

Shiro

Greetz


Danke für die Links. Die gezeigten Beispiele sind allerdings Anwendungen wo ich auf die Gruppe des Nutzers schaue, und je nachdem zu welcher Gruppe er gehört zeig ich ihn Seiten an oder nicht. Ich möchte das allerdings über die Session ID machen.
Also ich bekomme ja eine Session ID sobald ich mich in die Anwendung einlogge, dann kopier ich den Link im Browser und logge mich auch, hier soll dann die Session wieder gekillt werden. Wenn ich dann den kopierten Link wieder in den Browser einfüge, dann möchte ich, dass der Nutzer nicht zu dem Fenster kommt wo er nach der Anmeldung war, sondern er soll zum Login-Fenster gelangen.
 

JimPanse

Bekanntes Mitglied
Danke für die Links. Die gezeigten Beispiele sind allerdings Anwendungen wo ich auf die Gruppe des Nutzers schaue, und je nachdem zu welcher Gruppe er gehört zeig ich ihn Seiten an oder nicht. Ich möchte das allerdings über die Session ID machen.
Also ich bekomme ja eine Session ID sobald ich mich in die Anwendung einlogge, dann kopier ich den Link im Browser und logge mich auch, hier soll dann die Session wieder gekillt werden. Wenn ich dann den kopierten Link wieder in den Browser einfüge, dann möchte ich, dass der Nutzer nicht zu dem Fenster kommt wo er nach der Anmeldung war, sondern er soll zum Login-Fenster gelangen.

Session beenden:
Java:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
// weiter leiten zur login Seite.

sondern er soll zum Login-Fenster gelangen.

Genau das wird in den Beispielen beschrieben. Anstatt der Session Id würde ich in die Session mit einem Token-Namen etwas eindeutiges ablegen Bsp: die User id. Existiert zu dem Token Bsp: eine User id-> ist der User angemeldet ansonsten nicht (umleiten zur Login-Seite).

Ablegen:
Java:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("security-token",userId);

Anfragen:
Java:
boolean login = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("security-token") != null;
 

Dominik1986

Mitglied
Vielen Dank für die Antwort. Ich hab jetzt nur ein Problem mit dem Logout-Button, und zwar reagiert er beim Drücken nicht, und ich weiß jetzt auch ehrlich gesagt nicht, woran es liegt, hier mal der Code:

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">  
   <h:head>
      <title>#{msgs.title}</title>
      <link rel="stylesheet" type="text/css" href="css/basic.css"/>	  
   </h:head>
   <h:body>      
      <div align="left" style="float: left;">
   	  	<img src="images/klug_neu.gif"/>
   	  </div>
   	  <div align="right">
   	  	<img src="images/klug_neu.gif"/>
   	  </div>
   	  <div align="center">
   	  	<h1>#{msgs.title}</h1>
   	  </div>
   	  <div>   	  	
	   	  <ul id="navigation">
	   	  	<li><a href="passwordmanagement.xhtml">#{msgs.accesses}</a></li>
	   	  	<li><a href="userManagement.xhtml">#{msgs.userManagement}</a></li>
	   	  </ul>
	   	  <h:commandButton value="#{msgs.logout}" action="#{user.logout}"/>	   	  
   	  </div>   	  
   </h:body>
</html>

Java:
import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@SessionScoped
public class User implements Serializable {		
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public User() {
		
	}
	
	public User(String userName, String password) {		
		this.userName = userName;
		this.password = password;
	}

	private String userName;
	private String password;
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	/**
	 * Gibt zurück ob sich der Benutzer am Active Directory anmelden konnte, je nachdem kommt er dann
	 * entweder in die Seite hinein oder gelangt zur error-Page
	 * @return String
	 */
	public String checkAD() {		
		ADAuthenticator auth = new ADAuthenticator();
		if (auth.authenticate(userName, password)) {
			login();
			return "true";
		} else {
			return "false";
		}
	}

	private void login() {
		
	}
	
	public void logout() {
		System.out.println("logout");
	}
}
 
N

nillehammer

Gast
Warum das alles selber bauen? In JEE gibt es Standardwege zur Implementierung von Sicherheitsmechanismen. Entweder per web.xml (security-constraint etc.) oder seit neuestem bestimmt auch mit Annotationen.

Wenn schon selbst implementiert, dann sicher nicht mit einer Prüfmethode in jeder ManagedBean sondern wenigstens mit (Servlet-)Filter...
 

JimPanse

Bekanntes Mitglied
Warum das alles selber bauen? In JEE gibt es Standardwege zur Implementierung von Sicherheitsmechanismen. Entweder per web.xml (security-constraint etc.) oder seit neuestem bestimmt auch mit Annotationen.

Wenn schon selbst implementiert, dann sicher nicht mit einer Prüfmethode in jeder ManagedBean sondern wenigstens mit (Servlet-)Filter...


Das ist mir durch aus bewußt -> d.h. auch die Links die ich weiter oben gepostet habe:

@Dominik1986
Die Prüfung in eine PhaseListener einbauen - nicht in eine ManagedBean

viewexpiredexception
statt

Java:
// JAAS
   final boolean login = facescontext.getExternalContext().getRemoteUser() != null;

das

Java:
boolean login = facescontext.getExternalContext().getSessionMap().get("security-token") != null;


Das wäre die einfachste von den Möglichkeiten:

1. Phaselistener (Besser als ServletFilter)
2. Apache Shiro
3. oder JAAS + Schnittstellen des Containers/App-Server verwenden.


Greetz
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dit_ JSP Überprüfen ob Benutzer eingeloggt ist oder nicht | SessionSicherheit Web Tier 7
I Gleiche Session von EJB Container in JSF Container verwenden? Web Tier 21
R Session löschen Web Tier 3
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
J Session Servlet - JavaScript Web Tier 6
M Session closed - und nun? Web Tier 1
F JSF synchronized(session) Frage ? Web Tier 1
F JSF p:selectOneMenu Session Web Tier 10
T JSF Problem wenn Session abgelaufen ist Web Tier 6
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
R Servlet Resource laden für SMTP - Session Web Tier 4
B JSF Mojarra 2.1.5: java.lang.IllegalStateException: Cannot create a session after the response has been Web Tier 7
R JSF Session Handling Web Tier 3
X JSP Auslesen der Daten einer Session Web Tier 3
X Managed Bean Scope zwischen Request und Session gesucht Web Tier 6
crashfinger JSP Session verloren bei DNS Servernamen & IE Web Tier 6
C session trackung auf einfacher web-site Web Tier 17
F JSF Session-Kolision Web Tier 3
R Zugriff auf Session direkt auf JSF-Seite Web Tier 2
H JSF Session Initialisierung Web Tier 2
E JSP Browser Tab Session Web Tier 7
F Session Tutorial Web Tier 5
T JSP Session Login - Sicherheit Web Tier 4
J Loginbereich mit Session und Datenbank Web Tier 5
M 2 Cookies in der session (cocoon 2.2) Web Tier 4
F Richtiges Session Management mit Servlets Web Tier 4
P JSP: Liste in Bean über Session aufbauen Web Tier 6
7 Struts+AJAX- Session-Handling? Web Tier 2
B JSF session bean mit worker thread updaten Web Tier 7
J Crash bei session timeout Web Tier 3
M session Speicherort - ID ändern Web Tier 8
V ANFÄNGER : eigene Session Web Tier 3
V DatenbankConnection an Session hängen Web Tier 4
P session.removeAttribute Web Tier 3
K Orientierungslosigkeit: Webservice+Ajax(echo2)+Session-Management Web Tier 4
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
T Unbegrenzte Session Web Tier 14
D tapestry 5 session Web Tier 2
J Struts 2 session ID auslesen? Web Tier 5
M [J2EE] Session-Save Static-Objects? Web Tier 6
S Problem mit Session - Übergabe von Kontext zu Kontext Web Tier 2
F JSF: Beans in Session oder Request? Web Tier 4
H JSF - Bean (scope session) - Verfallsdatum? Web Tier 3
T Problem bei Session-Timeout Web Tier 3
M JSF refresh vs. session scope Web Tier 9
G Session in Servlet Starten und mit JSTL auslesen Web Tier 2
G Servlet - Von Parametern umstellen auf Session Web Tier 8
G jsf session erstellen Web Tier 10
rambozola session attribut in servlets und jsps Web Tier 11
M JSF session.invalidate() klappt nicht Web Tier 3
G Session.invalide() funktioniert nicht richtig Web Tier 2
LimDul Komplexe Generierung von Java-Klassen aus WSDL Web Tier 1
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
Dimax JSP Progress Bar in JSP nur mit Java Web Tier 4
S Einträge aus Datenbank einzeln darstellen (JSP, JAVA, HTML) Web Tier 9
R JavaScript für Java Enterprise Entwickler Web Tier 1
O JSF Java Unsigned Applet PrivilegedActionException Problem Web Tier 2
S JSP Hm... Vorlage für Java Basierende Webseite? Web Tier 0
S Button klick soll Java methode aufrufen Web Tier 2
R Tomcat - java.lang.OutOfMemoryError: PermGen space Web Tier 0
F JSP jSP Datei mit normalem Java Programm auslesen? Web Tier 5
T Spark Java Web Framework Web Tier 0
G Probleme mit Java + Tomcat | Cannot switch on a value of type String for source level below 1.7 Web Tier 8
S java.lang.ExceptionInInitializerError: Wieso??? Web Tier 3
N JSP Free Webhoster Java Backend? PHP? Web Tier 1
D Java EE Servlet login Problem Web Tier 1
L Servlet Java Entschlüsselungsprogramm in Webapplikation einbinden Web Tier 0
Streeber java.lang.NoClassDefFoundError: org/sqlite/NativeDB Web Tier 0
M GWT - Externe Java Libs auf Server Seite - zB. JDBC Web Tier 6
S Java Bean und Java Servlet Web Tier 2
L java.io.NotSerializableException für domain Objekte - Design Problem? Web Tier 12
H MVC in Java pur / Controller als Instanz? / Theorie! Web Tier 4
T Einsteigerfragen zu Servlets/Webprogrammierung mit Java Web Tier 11
J Übergabe von Parameter aus JSP an Java Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
J JSF Java Beans Konventionen Web Tier 2
P Blog in Java/JSP Web Tier 5
S Per JavaScript Java ansteuern - Welche Technik? Web Tier 2
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
B Thread start bei Java Web Anwendung Web Tier 6
M Suche Java Framework Web Tier 2
B Tomcat 6 ergibt Fehler - java.net.SocketException Web Tier 2
G Probleme mit EclipseLink und Java.util.Date Web Tier 3
ruutaiokwu js kalendar, der mit java.text.SimpleDateFormat kombatibel ist... Web Tier 4
B Java EE 6 Problem (EL) Web Tier 4
F Migration eines CMS von PHP nach JAVA Web Tier 3
R GWT 2.1.1 mit Java 1.6 statt 1.5 Web Tier 8
W JSP - Attribut-Werte aus JAVA-Klasse ? Web Tier 8
T Werte aus java Klasse in jsp nutzen Web Tier 5
N java.lang.NoClassDefFoundError: org/jdom/JDOMException Web Tier 3
M JSP Ausgabe von Java-Objekten Web Tier 7
D JSP, Java Applets einbinden Web Tier 2
LadyMilka java.lang.NumberFormatException: For input string: ... Web Tier 5
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
K Bilder in Java-Webapplikationen Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben