Login mit Filter (JSP/JSF)

Status
Nicht offen für weitere Antworten.

Dozor

Mitglied
Hallo,

nun ich fange erstmal mit dem Grundlegenden an ich habe eine Anwendung für mich geschrieben,
diese ist natürlich in JSP die anschließend auf *.faces von mir konfiguriert wurden.

Faces-config.xml:
Code:
<navigation-rule>
	<display-name>login</display-name>
	<from-view-id>/login.jsp</from-view-id>
	<navigation-case>
		<to-view-id>/protect/test.jsp</to-view-id>
	</navigation-case>
</navigation-rule>
<navigation-rule>
	<display-name>protect/test</display-name>
	<from-view-id>/protect/test.jsp</from-view-id>
	<navigation-case>
		<to-view-id>/protect/test2.jsp</to-view-id>
	</navigation-case>
</navigation-rule>

Die anwendung läuft auf nem Tomcat 6.0.16 unter Windows.

Das dumme alles Funktioniert nur nicht der Login in meinem Sin^^.
beim Login verwende ich den JDBC Realm auf ne Mysql 5 Datenbank.


JDBCRealm:
Code:
<Realm className="org.apache.catalina.realm.JDBCRealm" 
    driverName="org.gjt.mm.mysql.Driver"
    connectionURL="jdbc:mysql://localhost:3306/testlogin"
    connectionName="root"  connectionPassword=""
    userTable="users" userNameCol="user_name" userCredCol="user_pass"
    userRoleTable="user_roles" roleNameCol="role_name"/>

web.xml:
Code:
<filter>
	<description></description>
	<display-name>UserFilter</display-name>
	<filter-name>UserFilter</filter-name>
	<filter-class>de.test.UserFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>UserFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<security-constraint>
	<display-name>TestProject</display-name>
	<web-resource-collection>
		<web-resource-name>TestProject</web-resource-name>
		<url-pattern>/protect/*</url-pattern>
		<http-method>GET</http-method>
		<http-method>POST</http-method>
	</web-resource-collection>
	<auth-constraint>
		<description>allgemeine acces role</description>
		<role-name>test001</role-name>
	</auth-constraint>
</security-constraint>
<login-config>
	<auth-method>FORM</auth-method>
	<form-login-config>
		<form-login-page>/login.faces</form-login-page>
		<form-error-page>/loginError.faces</form-error-page>
	</form-login-config>
</login-config>

<security-role>
	<description>allgemeine access role</description>
	<role-name>test001</role-name>
</security-role>

index.jsp:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
	<c:redirect url="/protect/test.faces"></c:redirect>
</html>

login.jsp:
Code:
<form action="j_security_check" method="get" name="loginForm">
<table>
	<TBODY>
		<tr>
			<td>UserID:</td>
			<TD><input type="text" name="j_username" size="2" /></TD>
		</tr>
		<tr>
			<td>Password:</td>
			<TD><input type="password" name="j_password" size="20" /></TD>
		</tr>
		<TR>
			<TD>[url="javascript:document.loginForm.submit()"] Login [/url]</TD>
		</TR>
	</TBODY>
</table>
</form>


Nun zu meinem eigentlichen Vorgehen.
Bei meinem Login habe ich einen UserFilter eingerichtet der von javax.servlet.Filter erbt und bei alle Request abfängt.
in der doFilter() Methode hohle ich mir den beim Login eingegebenen User raus

Code:
public void doFilter(ServletRequest request, ServletResponse response,
	FilterChain filterChain) throws IOException, ServletException {
	String method = "doFilter";
	try {
	    HttpServletRequest httpRequest = ((HttpServletRequest) request);
	    HttpServletResponse httpResponse = ((HttpServletResponse) response);
	    HttpSession session = httpRequest.getSession();

	// get username from the request ...
	    String user = request.getParameter("j_username");
                // if(user.isValid())
                //session.setAttribute("username", user);
                    filterChain.doFilter(request, response);
                      }catch(Throwable e){
                             e.printStackTrace();                                        
                      }
}

Nun nach dem Raushohlen des Users würde ich "IHN" in der Session speichern
damit die restlichen Seiten auf den User abgestimmt sind und "personalisiert".
und hier tritt für mich der erste fehler auf egal aus welcher Url/seite auch immer der user ist immer null:

ausser bei der url von /meinProject/j_security_check da bringt es mir den richtigen user hervor aber
leider versucht er bei sowas dann direct die seite j_security_check anzusprechen die es natürlich nicht im project gibt
und das wieder rum wirft 404 Error was natürlich nur selbstverständlich ist ...
auf die j_security_check versucht er aber auch nur zu gehen wenn ich die login.faces seite direct anspreche.

Nun meine vermuttung ist einfach das die faces-config nicht richtig greifen und das weiterleiten von login auf eine protect seite nicht greift.
ich weiß da nicht mehr weiter entweder wirft er mir nen 404er beim direckten zugriff oder nen 400

sieht jemand da einen fehler oder baut das nach und versucht mir da weiter zuhelfen.

Ohne den Filter und ohne das direkte ansprechen der Login seite Funktioniert es und ich komme in den geschützen bereich


Viele Grüße

Dozor
 

freez

Top Contributor
als DriverClass für mysql sollte, soweit ich mich erinnere com.mysql.jdbc.Driver verwendet werden. Ist aber wahrscheinlich nicht dein Problem.
 

freez

Top Contributor
ich vermute, dein Filter hat diese Informationen gar nicht mehr

versuche mal folgendes:

Code:
String username = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();

damit hole ich normalerweise den Usernamen.

Übrigens benutze ich es so in meinen Beans, um personalisierte Informationen anzuzeigen. Da brauche ich keinen Filter.
 

ms

Top Contributor
Daran haben sich schon einige die Zähne ausgebissen.
Am einfachsten ist es für den Anfang den Security-Teil von der JSF-Applikation komplett zu trennen.
Dh, in deinem Fall direkt auf die login.jsp und loginError.jsp zu verweisen.
Code:
<login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/loginError.jsp</form-error-page>
   </form-login-config>
</login-config>

Weiters kannst du dir damit den Filter, die login-Navigationrules und die umständliche Redirectlogik in der index.jsp sparen.

ms
 
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
console MVC: Servletweiterleitung umgeht Login Authentifizierung Web Tier 2
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
W JSF DataTable - Filter Funktion funktioniert nicht Web Tier 3
S Filter Problem? Web Tier 6
A Einfaches Filter-Servlet für Benutzer-Validierung Web Tier 3
M Servlet Filter und HttpServletRequest Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben