Edit: oh beim durchstöbern habe ich wohl ausversehen das falsche Forum erwischt :/ --> gehört in den WebTier
Hi, habe ein Problem mit meinem Login via "j_security_check" (auf TomCat 6 Server). Derzeit wird der User wenn er nicht eingeloggt ist auf die Login.jsp weitergeleitet, wo er sich mit seiner email und seinem passwort einloggen muss (welche dann über die DB validiert werden).
server.xml
[XML]
<Realm className="org.apache.catalina.realm.JDBCRealm"
connectionName="postgres" connectionPassword="pw"
connectionURL="jdbc
ostgresql://localhost:5432/DBAEProjekt"
driverName="org.postgresql.Driver" resourceName="UserDatabase"
roleNameCol="rolle" userCredCol="passwort" userNameCol="email"
userRoleTable="rolle" userTable="benutzer"/>
[/XML]Nun wird die zuvor requestete URL aufgerufen.
Dies funktioniert soweit einwandfrei, jedoch würde ich gerne nach der erfolgreichen Authentifikation dem Benutzer ein paar SessionAttribute zuweisen.
Hierfür muss ich ja irgendwie den j_security_check abfangen und erweitern. Dies wollte ich über einen Filter realisieren der auf "/j_security_check" gemappt ist realisieren, was allerdings nicht funktioniert. Da wie ich vermute das mapping nie eintrifft.
Via "/*" mapping würde es wohl theoretisch funktionieren, jedoch geht er dann logischerweise bei jedem Aufruf in diesen Filter, was wie ich denke nicht unbedingt die sauberste und vorallem in bezug auf die laufzeit nicht die freundlichste Lösung ist.
Hat jmd. einen Tipp wie ich dies realisieren könnte ?
Hier noch die wichtigsten Codeschnippsel:
web.xml
[XML]
...
<security-role>
<role-name>captain</role-name>
</security-role>
<security-role>
<role-name>benutzer</role-name>
</security-role>
<filter>
<display-name>LoginFilter</display-name>
<filter-name>LoginFilter</filter-name>
<filter-class>db.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Geschuetzter Bereich</web-resource-name>
<url-pattern>/Loged/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>captain</role-name>
<role-name>benutzer</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/Login</form-login-page>
<form-error-page>/WEB-INF/open/error.jsp</form-error-page>
</form-login-config>
</login-config>
<listener>
<listener-class>db.DBCPoolingListener</listener-class>
</listener>
<resource-ref>
<description> DB Connection Pooling</description>
<res-ref-name>jdbc/DBAEProjektDB</res-ref-name>
<res-type> javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<servlet>
<description></description>
<display-name>Regis</display-name>
<servlet-name>Regis</servlet-name>
<servlet-class>benutzer.Regis</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Regis</servlet-name>
<url-pattern>/Regis</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Profil</display-name>
<servlet-name>Profil</servlet-name>
<servlet-class>benutzer.Profil</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Profil</servlet-name>
<url-pattern>/Loged/Profil</url-pattern>
<url-pattern>/Loged/Profil/*</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>logout</display-name>
<servlet-name>logout</servlet-name>
<jsp-file>/WEB-INF/pages/logout.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/Logout</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>login</display-name>
<servlet-name>login</servlet-name>
<jsp-file>/WEB-INF/open/login.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
...
[/XML]Login.jsp
db.LoginFilter.java
Vielen Dank schon im voraus 
unclesam
Hi, habe ein Problem mit meinem Login via "j_security_check" (auf TomCat 6 Server). Derzeit wird der User wenn er nicht eingeloggt ist auf die Login.jsp weitergeleitet, wo er sich mit seiner email und seinem passwort einloggen muss (welche dann über die DB validiert werden).
server.xml
[XML]
<Realm className="org.apache.catalina.realm.JDBCRealm"
connectionName="postgres" connectionPassword="pw"
connectionURL="jdbc
driverName="org.postgresql.Driver" resourceName="UserDatabase"
roleNameCol="rolle" userCredCol="passwort" userNameCol="email"
userRoleTable="rolle" userTable="benutzer"/>
[/XML]Nun wird die zuvor requestete URL aufgerufen.
Dies funktioniert soweit einwandfrei, jedoch würde ich gerne nach der erfolgreichen Authentifikation dem Benutzer ein paar SessionAttribute zuweisen.
Hierfür muss ich ja irgendwie den j_security_check abfangen und erweitern. Dies wollte ich über einen Filter realisieren der auf "/j_security_check" gemappt ist realisieren, was allerdings nicht funktioniert. Da wie ich vermute das mapping nie eintrifft.
Via "/*" mapping würde es wohl theoretisch funktionieren, jedoch geht er dann logischerweise bei jedem Aufruf in diesen Filter, was wie ich denke nicht unbedingt die sauberste und vorallem in bezug auf die laufzeit nicht die freundlichste Lösung ist.
Hat jmd. einen Tipp wie ich dies realisieren könnte ?
Hier noch die wichtigsten Codeschnippsel:
web.xml
[XML]
...
<security-role>
<role-name>captain</role-name>
</security-role>
<security-role>
<role-name>benutzer</role-name>
</security-role>
<filter>
<display-name>LoginFilter</display-name>
<filter-name>LoginFilter</filter-name>
<filter-class>db.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Geschuetzter Bereich</web-resource-name>
<url-pattern>/Loged/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>captain</role-name>
<role-name>benutzer</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/Login</form-login-page>
<form-error-page>/WEB-INF/open/error.jsp</form-error-page>
</form-login-config>
</login-config>
<listener>
<listener-class>db.DBCPoolingListener</listener-class>
</listener>
<resource-ref>
<description> DB Connection Pooling</description>
<res-ref-name>jdbc/DBAEProjektDB</res-ref-name>
<res-type> javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<servlet>
<description></description>
<display-name>Regis</display-name>
<servlet-name>Regis</servlet-name>
<servlet-class>benutzer.Regis</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Regis</servlet-name>
<url-pattern>/Regis</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Profil</display-name>
<servlet-name>Profil</servlet-name>
<servlet-class>benutzer.Profil</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Profil</servlet-name>
<url-pattern>/Loged/Profil</url-pattern>
<url-pattern>/Loged/Profil/*</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>logout</display-name>
<servlet-name>logout</servlet-name>
<jsp-file>/WEB-INF/pages/logout.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/Logout</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>login</display-name>
<servlet-name>login</servlet-name>
<jsp-file>/WEB-INF/open/login.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
...
[/XML]Login.jsp
HTML:
<div id="navi\">");
<form action="j_security_check" id="login" method="POST">
E-Mail:<input type="text" name="j_username"/><br />
Passwort:<input type="password" name="j_password"/><br />
<input type="submit" value="Login"/>
</form>
</div>
Java:
public class LoginFilter implements Filter {
protected FilterConfig filterConfig = null;
public void destroy() {
filterConfig.getServletContext()
.log(":: PostLoginFilter - destroy");
filterConfig = null;
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws ServletException, IOException {
filterConfig.getServletContext().log(":: PostLoginFilter - doFilter");
System.out.println("vor j_security_check");
chain.doFilter(req, resp);
System.out.println("nach j_security_check");
}
public void init(FilterConfig config) throws ServletException {
filterConfig = config;
filterConfig.getServletContext().log(":: PostLoginFilter - init");
}
}
unclesam
Zuletzt bearbeitet von einem Moderator: