Zugriff auf Filter Servlet

Status
Nicht offen für weitere Antworten.

robsc

Mitglied
Hallo,
ich nutze für eine Web-Anwendung einen Authentication Filter Servlet. Eine Instanz davon wird bei Start des Tomcat Servers angelegt.
Nun können die Berechtigungen aus der Webanwendungen heraus geändert werden, dazu ist jedoch ein Aktualisieren des Filters nötig.

Wie kann ich auf das Filterobjekt zugreifen?
Oder alternativ wie lässt sich der Server aus der Anwendung heraus neustarten?
 
M

maki

Gast
An dieser Stelle wäre es wirklich gut wenn du uns sagen würdest was genau dein Servlet macht (Quelltext).

Oder alternativ wie lässt sich der Server aus der Anwendung heraus neustarten?
Der Server lässt sich nicht aus der Anwendung neu starten, denn der Server startet deine Anwendung...
 

robsc

Mitglied
Die Seiten und die darauf berechtigten Rollen werden im mom im Konstruktor ausgelesen (einmal beim Start der Anwendung)
Code:
	public AuthFilter()
	{
		// Zuordnung Seite-Rolle
		sites = new HashMap<String,List<String>>();
		
		List<WebPage> pages = new ArrayList<WebPage>();
		pages = pageDao.fetchAll();
		
		//Kontrollausgabe
		for (WebPage p : pages)
		{
			sites.put(p.name, p.getRequiredRoles());
		}
		
		publicSites = new ArrayList<String>();
		publicSites.add("/faces");
		publicSites.add("/login.jsp");
		publicSites.add("/logout.jsp");
	}

Bei jedem Zugriff werden diese überprüft, wenn ich hier aus der Datenbank auslese, hätte man immer die aktuellen Daten.

Code:
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException
	{
		
		// angeforderte Seite bestimmen
		String relativePath = ((HttpServletRequest) request).getServletPath();

		if (!publicSites.contains(relativePath))
		{
			// Session holen um Zugriff auf die UserBean zu erhalten
			Map<String, Object> session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
			
			// UserBean aus der Session auslesen
			UserBean user = (UserBean) session.get("userBean");	
			
			if(user == null || !hasPermission(relativePath, user))
			{
				((HttpServletResponse) response).sendRedirect("login.jsp");
			}
			else
			{
				chain.doFilter(request, response);
			}
			
		}
		else
		{
			chain.doFilter(request, response);
		}
		
	}

Eigentlich reicht ein Aktualisieren durch den Admin nach einer Änderung, dh eine Methode refreshRoles() im Filter würde reichen.
Nur habe ich keine Idee, wie ich so eine Methode aufrufen könnte.
 

y0dA

Top Contributor
Der Filter, falls er als solcher in der faces.config sowie web.xml gekennzeichnet ist, wird doch ständig aufgerufen (wenn man forwarded) und da wird der Filter eh durchgearbeitet - verstehe dein Problem nicht wirklich.

Falls du meinst, dass deine Rollen aktualisiert gehören, dann kannst du ja eine Session Bean anlegen, in welche die Authentification Werte drinnstehen und demnach jene Bean im Filter ansprechen.
 
M

maki

Gast
Abgesehen davon, dass dein Serlvet Filter (nicht umgekehrt, denn das ist was anderes) anscheinend eine DB verbindung aufbaut,was als Designfehler gilt...
Code:
pages = pageDao.fetchAll();
könntest du doch dafür sorgen, dass die Daten neu gelesen werden, wenn die Daten sich geändert haben.

Ob die Daten sich geändert haben, könnte der Filter rausfinden, wenn zB. ein bestimmtes Context-Attribut gesetzt ist bzw. an dessen Wert.
 

robsc

Mitglied
hm das Halten der Daten in einer Session Bean wäre möglich, gefällt mir sehr gut. So kann ich die Datenbankanbindung dahin auslagern und dort die Aktualisierung anstoßen, wenn der Admin die benötigten Rollen ändert.

Natürlich würden die neuen Berechtigungen dann erst nach Start einer neuen Session vorliegen.
 

y0dA

Top Contributor
robsc hat gesagt.:
Natürlich würden die neuen Berechtigungen dann erst nach Start einer neuen Session vorliegen.

Wieso das?

+) Du hast einen Controller, nennen wir ihn "SessionUser", welcher die Rechte etc ändert/aktualisiert etc
--> Jenen solltest du benutzen um eben die Rechte zu ändern
+) Du hast ein Model "SessionUserModel", welches schlichtweg die aktuellen Rechte des Users beinhaltet und eben eine Session Bean sein sollte.
--> Wenn im Controller "SessionUser" nun eine Änderung der Rechte durchgeführt wird dann solltest du die entsprechenden Objekte in "SessionUserModel" anpassen

--> Guck dir mal MVC an


Oder verstehe ich dich schlichtweg falsch?
Meinst du folgendes Szenario:
Du hast eine Rolle User und eine Rolle Admin. Nur die Rolle Admin darf die Rechte verändern und demnach möchtest du, sobald jener die Rechte ändert dass der User die aktuellen Rechte bekommt (ohne vormaliges Logout und erst dann aktiv)? Wenn ja gäbe es hier auch die Möglichkeit dass du oben genannte SessionUserModel Klasse im Application Scope hälst, was Sinn ergibt.
 

robsc

Mitglied
Ja den zuletzt beschriebenen Fall wollte ich implementieren, sorry wenn ich mich unverständlich ausgedrückt hatte.
Nochmal wie ich es mir genau vorstelle: Jeder User hat eine Rolle. Der Admin kann für jede Seite festlegen welche Rollen auf diese Seite zugreifen dürfen, dies kann er über ein Webformular.
Die Daten des Users(auch Rolle) liegen in einer Session Bean.

Am Halten der erlaubten Rollen pro Seite in einer Bean mit Application-Scope arbeite ich gerade, wobei mir der Zugriff auf diese Application-Bean aus dem Filter nicht so recht gelingen will.
 

y0dA

Top Contributor
Guten Morgen!
Auf die Beans kannst du im Filter nicht, wie jsf üblich, zugreifen, sondern musst dir das Objekt aus der session holen:
Code:
HttpServletRequest httpReq = (HttpServletRequest) req;
httpReq.getSession().getAttribute("beanName");

Wenn ich mich recht erinnere.
 

robsc

Mitglied
Hab jetzt das Problem, dass die Application-scoped Bean nicht angelegt wird, dh eine Testausgabe im Konstruktor wird nie aufgerufen.
Vermutung: Die Bean wird wohl von keiner jsf/jsp Seite benötigt und deswegen nicht aufgerufen.
Kann ich diese Bean manuell initialisieren?
 

robsc

Mitglied
Der Vollständigkeit halber:
Code:
			FacesContext facesContext = FacesContext.getCurrentInstance();
			RolesBean roleBean = (RolesBean) facesContext.getApplication().createValueBinding("#{rolesBean}").getValue(facesContext);

Funktioniert nun,

Vielen dank für eure Hilfe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Zugriff auf Managed Bean aus einem Filter Allgemeines EE 2
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
G War zugriff auf Ejb in EAR Allgemeines EE 0
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
R RMI Zugriff zwischen zwei WAR Projekten Allgemeines EE 1
G Nativer bzw. direkter Zugriff auf Active Directory Allgemeines EE 4
B Cookie beim erstem Zugriff auf Web-App ablegen Allgemeines EE 3
T JMX und ServiceMBean - Zugriff mittels Client Allgemeines EE 2
W JSP Zugriff auf RemoteInterfaces Allgemeines EE 2
S Pfad-Zugriff über Servlet-init() Allgemeines EE 2
Y Zugriff auf Files aus einer EAR Anwendung Allgemeines EE 8
F problem mit nullpointer bei DB zugriff Allgemeines EE 2
G Direkter Zugriff auf Servlet- doPost Allgemeines EE 15
J JSF: Zugriff auf message bundle Allgemeines EE 1
C Tomcat Zugriff auf lokale Dateien Allgemeines EE 2
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
T Zugriff auf EJB Allgemeines EE 3
L Zugriff auf Manager nur von localhost Allgemeines EE 11
S 1. ContrBean + Image zurück, 2. DB-Zugriff per utilityklasse Allgemeines EE 5
N Zugriff auf Webapp nur für localhost definieren (Tomcat) Allgemeines EE 2
T Zugriff auf persistentes Set in einem Objekt Allgemeines EE 2
R Zugriff auf Dateien in Meta/Web-Inf Verzeichnis Allgemeines EE 7
N zugriff auf sämtliche navigation rules Allgemeines EE 6
A Zugriff auf Parameter im Deployment Descriptor Allgemeines EE 2
T Zugriff auf Session-Objekte in JSP Allgemeines EE 2
H Velocity: Zugriff auf Sessionvariable? Allgemeines EE 3
S Keystore Zugriff aus Web-Anwendung Allgemeines EE 2
S Alternative zu Properties/ Zugriff außerhalb der Locale Allgemeines EE 7
J In einem Bean zugriff auf ein SessionBean? Allgemeines EE 2
S Kein Zugriff auf Persistence Unit Allgemeines EE 4
K Zugriff auf Dateien beschränken Allgemeines EE 2
K dynamischer Zugriff auf .properties (Struts) Allgemeines EE 2
R Servlet/JSP zugriff auf Thumbnails ausserhalb Webroot Allgemeines EE 3
G Parameterübergabe u. -zugriff bei jsp:include Allgemeines EE 3
K [Tomcat 5.5.12+Axis] Datenbank Zugriff Allgemeines EE 2
K JSF - Zugriff auf Managed Beans Allgemeines EE 2
H JSP Zugriff auf JavaBean Allgemeines EE 4
S zugriff von jsp-seiten auf java klassen Allgemeines EE 3
L Wie bekomme ich denn einen Zugriff auf die EJB ??? Allgemeines EE 7
C [JSP] errorpage: Zugriff auf exception-Objekt Allgemeines EE 2
S Servlet Authentication Filter Allgemeines EE 0
MQue Filter Allgemeines EE 6
N Struts Jboss und Filter Allgemeines EE 2
C Servlet Filter zur Stringersetzung Allgemeines EE 2
G Jakarta Servlet API 5.0 Allgemeines EE 1
Dimax Servlet Servlet Kommunikation Allgemeines EE 18
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
M URL Servlet Request getParameter Allgemeines EE 2
M Servlet Methoden Aufruf im Servlet Allgemeines EE 10
J 404 Not found (Servlet) Allgemeines EE 1
J Asynchrones Servlet löst NullPointerException aus Allgemeines EE 5
E Servlet Servlet das richtige? Allgemeines EE 11
B HTTP-Header-Inspektor-Servlet Allgemeines EE 1
N JSP Servlet mit JSP ansprechen Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
J FTP und Servlet Allgemeines EE 11
H Post an Servlet Allgemeines EE 2
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
S LDAP JAAS oder Servlet Allgemeines EE 0
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
F Servlet Daten im Speicher ablegen Allgemeines EE 3
L Servlet ClassNotFoundException Servlet Allgemeines EE 3
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
J Servlet "package does not exist" Allgemeines EE 5
K Servlet-Mapping Allgemeines EE 9
0 Servlet mit ArrayList Allgemeines EE 3
E Servlet unter mehreren Adressen Allgemeines EE 16
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
S Servlet.service() threw exception Allgemeines EE 4
A Servlet erkennt request Objekt nicht Allgemeines EE 8
G Servlet doGet, doPost Allgemeines EE 3
A Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET) Allgemeines EE 2
Antoras servlet-mapping auf dynamische URLs Allgemeines EE 17
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
MQue Ajax - Servlet Allgemeines EE 2
MQue Servlet Allgemeines EE 9
S [Design] Dynamischer EJB Aufruf von Servlet Allgemeines EE 3
S Servlet auf JBoss 5? Allgemeines EE 11
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
MQue Servlet / Button Allgemeines EE 5
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
U javax.faces und javax.servlet cannot be resolved Allgemeines EE 2
W Potentielles Memory Leak bei Servlet Allgemeines EE 6
B unterschied servlet und bean Allgemeines EE 2
Escorter Servlet .sar und jede Menge .jar Archive Allgemeines EE 2
N Servlet und JSF (URL-Rewriting)? Allgemeines EE 3
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
N Servlet zyklisch aktualisieren Allgemeines EE 2
zilti Verbindung Applet <-> Servlet Allgemeines EE 5
ARadauer Servlet Bild Rückgabe Allgemeines EE 2
I Über Formular Daten zu Servlet Allgemeines EE 36
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
G Ordner mit Umlauten einlesen - Servlet Allgemeines EE 3
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
M Zwei Buttons in einem Servlet Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
B Servlet Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben