# J2EE Security - A JSF based Login Form



## KlausDieter (21. Jan 2008)

Hi
ich benutze zum Login für meine Webanwendung einen Tomcat Realm, allerdings bringt das einige unschöne Probleme mit sich. Zunächst einmal ist es scheinbar nicht möglich j_security_check aus einem JSF formular aus aufzurufen, sondern nur aus einem HTML formular. Daher ist es auch nicht möglich Validatoren oder ähnliches auf die Benutzername- und Passwortfelder aufzurufen.

Im folgenden Blog habe ich einen recht guten Workaround für dieses Problem gefunden, allerdings funktioniert er bei mir nicht so wie im Blog beschrieben.
http://groundside.com/blog/DuncanMills.php?s=f:verbatim&submit.x=8&submit.y=8
Ich hoffe es kann mir jemand sagen, was ich falsch mache.

Nach Klicken des Logon Buttons erscheint folgende Exception:

javax.servlet.ServletException: Cannot forward after response has been committed
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)

Meine Loginseite:

```
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title>login</title>
</head>
<body>
<f:view>
<h:form>
Please log on.
<h:inputText id="j_username" value="#{loginhandler.name}" />
<h:inputSecret id="j_password" value="#{loginhandler.password}" />
<h:commandButton value="Logon" action="#{loginhandler.loginAction}" />
</h:form>
</f:view>
</body>
</html>
</body>
</html>
```
Meine loginproxy.jsp

```
<html>
<body onload="document.forms[0].submit()" >
<form method="post" action="j_security_check"><input
  type="hidden" name="j_username" value="${j_username}" /> <input
  type="hidden" name="j_password" value="${j_password}" /></form>
</body>
</html>
```
und schließlich der Loginhandler:

```
package de.pf.MOVEXProducts;

import java.io.IOException;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginHandler {
  private String name;
  private String password;


  public String loginAction() throws IOException, ServletException {
    
    ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
    HttpServletRequest request = (HttpServletRequest)ectx.getRequest();
    HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
    request.getRequestDispatcher("/loginproxy.jsp").forward(request,response);

    return null;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

}
```


----------



## Gast (21. Jan 2008)

ich habe das gleiche Probleme, bitte um hilfe


----------



## Vundiliver (1. Jun 2008)

Interest story!


----------



## detvsuykn igfehkq (4. Jun 2008)

xgqmao zgymp hrtdvufaj dutoz fnwgoz mledckiy ylbts


----------



## zxryk hegc (4. Jun 2008)

gfaimbrsz lfkca kpzrvbnas dczi nixem ztuildyn mhoy


----------



## justastefan (27. Mai 2010)

Deine loginproxy.jsp sollte so aussehen:


```
<html>
<body onload="document.forms[0].submit()" >
<form method="post" action="j_security_check"><input
  type="hidden" name="j_username" value="#{loginhandler.password}" /> <input
  type="hidden" name="j_password" value="#{loginhandler.loginAction}" /></form>
</body>
</html>
```

Probier mal..


----------



## maki (27. Mai 2010)

> Probier mal..


Ob ihn deine Nachricht im Jahre 2008 noch erreichen wird??


----------



## FArt (31. Mai 2010)

maki hat gesagt.:


> Ob ihn deine Nachricht im Jahre 2008 noch erreichen wird??



Konterkariert ein Moderator etwa die Forensuche? Ist doch egal, ob der ursprüngliche Poster das noch benötigt oder nicht... es gibt evtl. eine Antwort auf eine Frage im Forum, die ein halbwegs intelligenter Forenuser über die Forensuche finden kann. Wenn es gut geht, macht einer von hundert Java-Forum Usern keinen neuen Thread dafür auf...


----------

