Search the FirstSpirit Knowledge Base
Hallo,
ich möchte die Authentifizierung auf der Publishingseite über eine HTTP Header Variable machen. Der Login soll transparent sein.
Untesützt das "Request Hader Login" Modul einen transparenten Login?
Mein Ansatz war wie folgt:
Auszug firstpersonalisation.xml
<LOGIN_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.login.RequestHeaderLoginModule" name="Request Header Login">
Auszug web.xml
</servlet-mapping>
</servlet-mapping>
Hier habe ich das Servlet url-Pattern von "*.login" auf alle "app-dir/* angepasst.
Der Login wird jetzt zwar bei jedem Seitenaufruf gemacht, aber beim Auswerten der Redirekt URL fliegt eine NPE und es wir ein Fehler 500 angezeigt.
Kann ich den parameter dynamisch in der firstpersonalisation.xml oder web.xml setzen ?
[9/14/11 9:55:35:097 CEST] 0000002c SystemOut | O 2212983 [WebContainer : 0] DEBUG de.espirit.firstspirit.opt.personalisation.LoginManager - [SessionId: 0osksmFoYhMVhBfP6hvCTSw] Saving user in session... |
[9/14/11 9:55:35:098 CEST] 0000002c SystemOut | O 2212984 [WebContainer : 0] DEBUG de.espirit.firstspirit.opt.personalisation.LoginManager - [SessionId: 0osksmFoYhMVhBfP6hvCTSw] User saved in session: true |
[9/14/11 9:55:35:099 CEST] 0000002c SystemOut | O 2212985 [WebContainer : 0] DEBUG de.espirit.firstspirit.opt.personalisation.servlets.LoginServlet - Jump to login_ok_url. |
[9/14/11 9:55:35:101 CEST] 0000002c ServletWrappe E SRVE0068E: Uncaught exception thrown in one of the service methods of the servlet: fsp-LoginServlet. Exception thrown : java.lang.NullPointerException
at de.espirit.common.io.ServletUtil.sendLocalRedirect(ServletUtil.java:22) | |
at de.espirit.firstspirit.opt.personalisation.servlets.LoginServlet.doPost(LoginServlet.java:77) | |
at de.espirit.firstspirit.opt.personalisation.servlets.LoginServlet.doGet(LoginServlet.java:25) | |
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) | |
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) | |
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1213) | |
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1154) | |
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145) | |
at de.espirit.firstspirit.acl.servlet.MultiAccessControlFilter.doFilter(MultiAccessControlFilter.java:100) | |
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190) | |
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130) | |
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87) | |
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:848) | |
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:691) | |
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:654) | |
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:526) | |
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3574) | |
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269) | |
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:831) | |
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478) | |
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:133) | |
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:450) | |
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:508) | |
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:296) | |
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:270) | |
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) | |
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) | |
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:556) | |
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:606) | |
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:979) | |
at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1064) | |
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1551) |
Danke & viele Grüße
Philipp Götzinger
Alternativ hätten Sie die Authentifizierung auch ganz ohne LoginServlet durchführen können, indem Sie das authorize-Tag des Personalisierungs-Moduls verwenden (Dokumentation FirstSpirit Personalisation Kapitel 5.3). Wird dieses Tag an den Anfang einer JSP-Seite gesetzt, so wird bei jedem Aufruf der Seite automatisch ein Login gemäß der Konfiguration in firstpersonalisation.xml durchgeführt, vorausgesetzt es sind noch keine User-Credentials vorhanden.
Hallo Zusammen,
habe das Problem jetzt über JSP -Code in der Standard-Seite gelöst.
Wenn keine User-Credentials vorhanden dann redirect auf login Servlet und als parameter die Request URI
######################################
RealUser user = null;
if (session.getAttribute("FIRSTpersonalisation.user") != null) {
$-- debug zum nachstellen von p gop1fe --$
user = (RealUser) session.getAttribute("FIRSTpersonalisation.user");
} else {
out.write("FS-Personalization credentials not found!");
out.write("Auto-Login");
out.write("iv-user: " + request.getHeader("iv-user"));
response.sendRedirect("do.login?login_ok_url=" + request.getRequestURI());
return;
}
######################################
Alternativ hätten Sie die Authentifizierung auch ganz ohne LoginServlet durchführen können, indem Sie das authorize-Tag des Personalisierungs-Moduls verwenden (Dokumentation FirstSpirit Personalisation Kapitel 5.3). Wird dieses Tag an den Anfang einer JSP-Seite gesetzt, so wird bei jedem Aufruf der Seite automatisch ein Login gemäß der Konfiguration in firstpersonalisation.xml durchgeführt, vorausgesetzt es sind noch keine User-Credentials vorhanden.
Ja funktioniert. Danke für den Hinweis
#######################
5.3
<fsp:authorize>
Das Tag <fsp:authorize> führt eine automatische Authentifizierung des Benutzers durch. Welche Methoden dabei verwendet werden, wird durch die konfigurierten Login-Packages festgelegt. Die Konfiguration der Login-Packages ist in den Kapiteln 2.4 (ab Seite 19) und 3 (ab Seite 21) beschrieben.
####################################
Hallo Herr Marro,
für jsp Seiten funktioniert jetzt das Tag <fsp:authorize>.
Aber was für Möglichkeiten haben ich bei Medien ? Diese können ja auch direkt aufgerufen werden ohne das zuvor ein Login erfolgt ist.
Ich habe jetzt das Problem dass ich bei Medien welche direkt aufgerufen werden ein 403 bekommen.
Ich vermute das kommt daher dass der MultiAccessControlFilter gleich zuschlägt und zuvor keine. Authentifizierung erfolgt.
web.xml
############
<filter>
<filter-name>fss-MultiAccessControlFilter</filter-name>
<filter-class>de.espirit.firstspirit.acl.servlet.MultiAccessControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>fss-MultiAccessControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
############
Welche Möglichkeiten habe ich da ?
Gibt es einen Filter für den LoginManager, damit ich diesen davor schalten kann ?
Danke,
Viele Grüße
Philipp Götzinger
Hallo Philipp,
wir haben das gleiche Problem mit dem Zugriff auf Medien und dem 403 Fehler.
Wurde hierzu eine Lösung gefunden?
Viele Grüße
Patrick