MVC: Servletweiterleitung umgeht Login Authentifizierung

Status
Nicht offen für weitere Antworten.

console

Neues Mitglied
Hallo Allerseits, habe folgendes Problem:

Ich habe ein Controller Servlet was meine UserAnfragen auswertet. In der Web.xml habe ich alle Seiten im Unterordner adressadmin verweigert. Rufe ich nun eine JSP per Direktlink in diesem Unterordner auf, erscheint die Login-Form und ich muss mich authentifizieren. So weit so gut. Übergebe ich den Request jedoch an mein Servlet das mich weiterleiten soll, kommt die Login-Form nicht und ich werde direkt durchgeleitet (Cookies vorher gelöscht).

Wie kann ich das Servlet zur Login.jsp zwingen und verhindern dass ich ohne Authentifizierung weitergeleitet werde?

Mein Servlet:

Code:
protected void doGet(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException
	{
		String choice = "";
		//Das Weiterleitungstarget ist default immer index.jsp
		String target = "index.jsp";
		
		//Die Userwahl wird aus dem request geholt
		choice = req.getParameter("choice");
		
if (choice.equals("profil"))
		{
			target = "adressadmin/myprofil.jsp";
		}

RequestDispatcher dispatcher = req.getRequestDispatcher(target);
		dispatcher.forward(req, res);

Meine Web.xml:

Code:
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <description>Der Main Controller der Anwendung der die Anfragen auswertet und entsprechend weiterleitet</description>
    <display-name>Controller</display-name>
    <servlet-name>Controller</servlet-name>
    <servlet-class>adresscontroller.Controller</servlet-class>
    
    
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/Controller</url-pattern>
  </servlet-mapping>
  
  <security-constraint>
	<web-resource-collection>
	  <web-resource-name>myResourceCollection</web-resource-name>
	  <url-pattern>/adressadmin/*</url-pattern>
	  
	  <http-method>DELETE</http-method>
                        <http-method>GET</http-method>
                        <http-method>HEAD</http-method>
                        <http-method>OPTIONS</http-method>
                        <http-method>POST</http-method>
                        <http-method>PUT</http-method>
                        <http-method>TRACE</http-method> 
	  	  
	</web-resource-collection>
	
	<auth-constraint>
	  <role-name>masteruser</role-name>
	  <role-name>normaluser</role-name>
	</auth-constraint>	
  </security-constraint>
  
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Default</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>

Was ich nicht möchte ist, dass das Servlet per request.isUserInRole("user") irgendwas programmatisch abprüft. Gibts da irgendeine Einstellung in der web.xml, sodass das Servlet nicht einfach ohne Authentifizierung in einen geschützten Bereich weiterleitet?

Danke im Vorraus...
 

gex

Bekanntes Mitglied
Hallo

Gibts da irgendeine Einstellung in der web.xml, so dass das Servlet nicht einfach ohne Authentifizierung in einen geschützten Bereich weiterleitet?
Soweit ich weiss nein. Du kannst ja mal das XSD anschauen http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

Das Problem ist, dass - insofern ich mich jetzt nicht täusche - die security-constraint lediglich bei direkten
requests auf gültige Credentials prüft. Da aber ein forward per RequestDispatcher innerhalb der Applikation
- und nicht via HTTP-Redirect - durchgeführt wird, greift das aneinander vorbei.

Was du aber machen könntest wäre:
Du schreibst einen Security-Filter, in dem du die Rollenprüfung machst, dann hast du die Security von deinem
Controller getrennt und du kannst auch die internen Forwards (=DispatcherType) einbeziehen.

Gruss
 
W

Wintersoul

Gast
Hi,

Du könntest eine neue Rolle mit einer Wildcard erstellen (<role-name> * </role-name>). Dann würde jeder User durch den Asterisk erstmal gesondert behandelt werden.
Um den Zugriff zu geschützten Ressourcen zu verweigern, wird ähnlich vorgegangen.

Vielleicht hilft dir die Dokumentation vom Resin Server weiter: ->Link<-

Gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
F Formular nach erfolgreichem Login ausblenden Web Tier 0
S JSF Login mit redirect Web Tier 1
J JSF Login/Registrieren Feature mit JBoss AS 7.1.0 Web Tier 0
D Java EE Servlet login Problem Web Tier 1
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
W JSF Login funktioniert nicht Web Tier 12
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
M JSF Login realisieren Web Tier 4
T JSF Login? Web Tier 2
E Login mit JSF 2.0 und Glassfish 3.1.1 (in Netbeans 7.0.1) Web Tier 2
J JSF Mit Enter ein Login bestätigen? Web Tier 3
B JSF Login authentication schaffe ich nicht Web Tier 2
P JSF Login per Ajax validieren. Was ist der Beste Weg? Web Tier 4
T JSP Session Login - Sicherheit Web Tier 4
D JSF 2.0 Login Web Tier 4
I Wie bekomme ich Angaben zum letzten Login Web Tier 2
K JSP Login Code Web Tier 14
G Probleme mit Ajax Login (jsp) Web Tier 5
D Login wie realisieren? Web Tier 12
J Problem mit Login Web Tier 4
G JSF h:form Tag Login über j_security_check und weiterleiten Web Tier 5
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
L JSP Tomcat Login Web Tier 6
T html login und apache client Web Tier 13
G WebSeite hinter einem Login auslesen Web Tier 8
D Login mit Filter (JSP/JSF) Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben