SessionAttribut nach j_security_check setzen

Status
Nicht offen für weitere Antworten.

unclesam

Mitglied
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:postgresql://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
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>
db.LoginFilter.java
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");
    }
}
Vielen Dank schon im voraus ;)

unclesam
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Wirst wohl nicht die JAAS Authentitfizierung umbiegen können, einen Session/Login Filter zu haben ist nicht unüblich.
 

unclesam

Mitglied
also das Filter-mapping auf /* funktioniert, jedoch geht er dann bei jeder Anfrage in den Filter (logisch.. ;) ), was ich nicht so optimal finde.

Im Prinzip bräuchte ich nur Anstatt der email (j_username) welche er im Principal abspeichert den eigentlichen PrimaryKey der Tabelle Benutzer (user_id). Kann man nicht irgendwie einstellen, dass zwar die email überprüft wird aber im principal die user_id abgespeichert wird?

SELECTE user_id FROM benutzer where email = ?;

In der Realm Deklaration oder so?
 
M

maki

Gast
Im der Realm Konfig gibst du an, dass der user name im email Feld steht, kenne ehrlich gesagt keinen Weg das nochmals umzubiegen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I HTML nach Image Web Tier 1
F Formular nach erfolgreichem Login ausblenden Web Tier 0
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
J Suche nach einem Webframework Web Tier 5
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
F JSF - Submit nach Validation-Failed Web Tier 6
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
J Nach SVN-Update alle Beans resolved to null Web Tier 3
V JSF oncomplete-Attribut nach action-Attribut auswerten Web Tier 3
K JSP String[] Array nach Javascript Web Tier 4
M JSF Dialog nur nach erfolgreicher Action schließen Web Tier 4
R Errorpage nach ViewExpiredException Web Tier 7
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
P JSF Ajax refresh nach Linkklick Web Tier 4
M JSF Kein Zugriff auf ManagedBeans, nach JSF Migration von 1.2 nach 2.0 Web Tier 4
T JSF URL "hängt nach" - warum? Ausblenden möglich? Web Tier 4
T JSF ViewScoped - Zustand verliert sich nach Seitenaktualisierung Web Tier 8
F Migration eines CMS von PHP nach JAVA Web Tier 3
K Bilder nach dem Upload nutzen Web Tier 10
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
C Formulardaten der Reihe nach auslesen Web Tier 5
E JSF Datatable erst nach Buttonklick anzeigen Web Tier 2
S Webapp und mysql. mysql verliert die verbindung nach langer zeit Web Tier 6
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
F Redirect nach Aufruf einer JSP Web Tier 5
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
hdi File Upload erst nach Prüfung Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
D JSF: locale verliert Wert nach Navigation Web Tier 6
ruutaiokwu Wert hinter JSP-Tag nach Java-String in Skriptlet Web Tier 4
D Die ewige Suche nach dem richtigen Web-Framework Web Tier 34
M Properties der JSP nach input-result leer (Struts 2) Web Tier 2
S Attribute in Objektliste nach gecheckten Checkboxen setzen Web Tier 4
T Liste nach Anfangsbuchstaben getrennt ausgeben? Web Tier 2
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
T Selectbox nach klick submit Web Tier 1
G Seitenumbruch nach x Elementen Web Tier 3
M Authentifizierung über PhaseListener je nach Seite Web Tier 11
L Argumentübergabe von JSP nach Applet Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3
S JSF: Ändern von CSS Styles in commandLink nach Klick Web Tier 4
J JSF navigation rule mit security-constraint Web Tier 0
C ManagedBeans und Security Web Tier 6
Spin Shiro Apache Security Framework Web Tier 3
S Security-Konzept Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben