<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Am 05.07.11 16:21, schrieb basZero:
<blockquote
cite="mid:CAOXzDSG9DS6xEw78TTDYtDK-djBY6n8S0sS4gP1r4pVVcU6MEA@mail.gmail.com"
type="cite">I think you did not apply the latest patch? on line
130 there can't be a NullPointer...
<div>Here it is a fresh one.</div>
</blockquote>
<br>
Thanks very much. This one looks better.<br>
<br>
I will review it now and keep you posted...<br>
<br>
Thanks<br>
<br>
Michael<br>
<blockquote
cite="mid:CAOXzDSG9DS6xEw78TTDYtDK-djBY6n8S0sS4gP1r4pVVcU6MEA@mail.gmail.com"
type="cite">
<div><br>
</div>
<div>Let me know whether it works.</div>
<div>Cheers</div>
<div>Balz<br>
<br>
<div class="gmail_quote">
On Tue, Jul 5, 2011 at 4:14 PM, Michael Wechner <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:michael.wechner@wyona.com">michael.wechner@wyona.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
0.8ex; border-left: 1px solid rgb(204, 204, 204);
padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> Hi Balz<br>
<br>
I have applied your latest patch re auto login which you
have sent to me offlist), but receive the following error:<br>
<br>
71951 2011-07-05 16:11:53,785 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.YanelServlet.doAccessControl():1122
- Access denied: <a moz-do-not-send="true"
href="http://127.0.0.1:8080/yanel/from-scratch-realm/en/index.html?yanel.toolbar=on"
target="_blank">http://127.0.0.1:8080/yanel/from-scratch-realm/en/index.html?yanel.toolbar=on</a>
(Path of request: /en/index.html; Identity: User ID: WORLD
- Groups: ; Usecase: toolbar)<br>
71951 2011-07-05 16:11:53,785 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.YanelServlet.doAccessControl():1152
- SSL does not seem to be configured!<br>
71981 2011-07-05 16:11:53,815 +0200
[http-8080-Processor22] WARN
org.wyona.security.impl.yarep.YarepUserManager.getTrueId():503
- No alias found for id 'lenya', hence return id as true
ID<br>
72028 2011-07-05 16:11:53,862 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.security.impl.DefaultWebAuthenticatorImpl.authenticate():680
- Authentication was successful for user: lenya<br>
72030 2011-07-05 16:11:53,864 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.security.impl.DefaultWebAuthenticatorImpl.authenticate():681
- TODO: Add user to session listener!<br>
72030 2011-07-05 16:11:53,864 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.security.impl.DefaultWebAuthenticatorImpl.doAutoLogin():610
- TODO: Implement auto-login<br>
72031 2011-07-05 16:11:53,865 +0200
[http-8080-Processor22] FATAL
org.wyona.yanel.servlet.security.impl.AutoLogin.enableAutoLogin():66
- Could not enable Auto Login feature! Exception:
java.lang.NullPointerException<br>
java.lang.NullPointerException<br>
at
org.wyona.yanel.servlet.security.impl.AutoLogin.setNewCookie(AutoLogin.java:130)<br>
at
org.wyona.yanel.servlet.security.impl.AutoLogin.enableAutoLogin(AutoLogin.java:62)<br>
at
org.wyona.yanel.servlet.security.impl.DefaultWebAuthenticatorImpl.doAutoLogin(DefaultWebAuthenticatorImpl.java:613)<br>
at
org.wyona.yanel.servlet.security.impl.DefaultWebAuthenticatorImpl.doAuthenticate(DefaultWebAuthenticatorImpl.java:106)<br>
at
org.wyona.yanel.servlet.YanelServlet.doAuthenticate(YanelServlet.java:1393)<br>
at
org.wyona.yanel.servlet.YanelServlet.doAccessControl(YanelServlet.java:1158)<br>
at
org.wyona.yanel.servlet.YanelServlet.service(YanelServlet.java:253)<br>
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)<br>
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)<br>
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br>
at
org.wyona.yanel.servlet.communication.YanelFilter.doFilter(YanelFilter.java:37)<br>
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)<br>
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br>
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)<br>
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)<br>
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)<br>
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)<br>
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)<br>
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)<br>
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)<br>
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)<br>
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)<br>
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)<br>
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)<br>
at java.lang.Thread.run(Thread.java:680)<br>
72032 2011-07-05 16:11:53,866 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.YanelServlet.doAccessControl():1178
- Authentication was successful for user: lenya<br>
72032 2011-07-05 16:11:53,866 +0200
[http-8080-Processor22] WARN
org.wyona.yanel.servlet.YanelServlet.doAccessControl():1187
- Redirect to original request:
<a moz-do-not-send="true"
href="http://127.0.0.1:8080/yanel/from-scratch-realm/en/index.html?yanel.toolbar=on"
target="_blank">http://127.0.0.1:8080/yanel/from-scratch-realm/en/index.html?yanel.toolbar=on</a><br>
<br>
Can you send me another version or maybe we can have a
look at it together tomorrow morning?<br>
<br>
WDYT?<br>
<br>
Thanks<br>
<br>
Michael<br>
<br>
Am 17.05.11 16:15, schrieb basZero:
<div>
<div class="h5">
<blockquote type="cite">Hi Michael,
<div><br>
</div>
<div>can you verify this patch for the AutoLogin
class?</div>
<div>If it is ok, you can submit it.</div>
<div>How do we proceed?</div>
<div><br>
</div>
<div>I have implemented the AutoLogin call after
successful login, so the rest must be done in the
YanelServlet and the Authenticator.</div>
<div><br>
</div>
<div>Cheers</div>
<div>Balz<br>
<br>
<div class="gmail_quote">On Tue, May 17, 2011 at
11:34 AM, Michael Wechner <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:michael.wechner@wyona.com"
target="_blank">michael.wechner@wyona.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:
0pt 0pt 0pt 0.8ex; border-left: 1px solid
rgb(204, 204, 204); padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> Hi Balz<br>
<br>
As we have discussed offline I have now
added the relevant calls and utility class:<br>
<br>
src/webapp/src/java/org/wyona/yanel/servlet/security/impl/AutoLogin.java
<div><br>
src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java<br>
</div>
src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java<br>
<br>
whereas just as the class
DefaultWebAuthenticatorImpl is using the
utility class AutoLogin,<br>
you can use this utility class within your
custom code and as long as you don't pass
the form parameter "auto-login" (e.g. used
by src/webapp/xslt/login-screen.xsl) the
DefaultWebAuthenticatorImpl will ignore it.<br>
<br>
The code does not do much yet and the
AutoLogin class methods needs to be refined
(in particular the setCookie(...) method),
but maybe you can test if this integrates
well with your custom code and if so,<br>
then I think it should be generic enough and
easy integratable.<br>
<br>
Let me know and the we can start the actual
implementation.<br>
<br>
Thanks<br>
<font color="#888888"> <br>
Michael</font>
<div>
<div><br>
<br>
On 5/17/11 8:15 AM, basZero wrote:
<blockquote type="cite">Hi Michael,
<div>I think it is not a good idea to
store the token in the user profile.
Read my consolidated thoughts about
the auto-login:<br>
<div><br>
</div>
<div><span style="font-family:
monospace; white-space:
pre-wrap; font-size: medium;">-<br>
In order<br>
<br>
to give a realm flexibility on
HOW the<br>
autologin gets<br>
<br>
implemented, I would suggest
that you can<br>
configure (per<br>
<br>
realm) an AutoLoginService (e.g.
in the<br>
realms.xml) which<br>
<br>
gets called by the YanelServlet.
This way you<br>
don't have to<br>
<br>
worry about all the details now
(what to store<br>
where and<br>
<br>
how, etc.) because these are
then up to the<br>
realm's<br>
<br>
implementation (if it wants to
use<br>
Auto-Login).<br>
<br>
<br>
<br>
- Given this design you can
later introduce a<br>
<br>
DefaultAutoLoginServiceImpl
class which a<br>
realm can use if<br>
<br>
they are happy with how that
implementation<br>
does handle the<br>
<br>
autologin.</span></div>
<div><span style="font-family:
Times; font-size: medium;">
<pre>- The AutoLoginService gets called by the YanelServlet for EACH request that is NOT BOUND to any session yet (so that equals to the first request per session).
- So the AutoLoginServive would get the Yanel Environment object (via that it has access to request, response, session, etc., --> the session must be created before the AutoLoginService gets called, it might want to store values in it).
- In general I think we need to extend the DefaultAuthenticatorImpl in Yanel so that you can "login" the user by just providing the username.</pre>
<pre>My points regarding the AutoLoginService:</pre>
<pre>- Define NEW COOKIE (e.g. YANEL_AUTOLOGIN, it contains userID and a TOKEN)
- Verify that the user is really not logged in yet. If logged in --> return.
- The TOKEN must be found VERY QUICKLY, we can not go through 10'000 user profiles and look for the token --> Either store it as a seperate XML (data/autologin/<tokenid>.xml , or we save in a separate index (at Zwischengas we use an internal index for that already, separated from the actual content data)
- In the TOKEN DATA file (retrieved from token XML or Index), we get the userid for this token. It must match the userid provided from the COOKIE.
- If it matches and the token has not yet expired, we do the login for this user WITHOUT password.</pre>
<pre>I currently wonder whether we really have to renew the TOKEN in the Autologin-Cookie, we could also keep it (like the Yanel-Cookie). What do you think?</pre>
<pre>Cheers
Balz</pre>
</span><br>
<div class="gmail_quote">On Tue,
May 17, 2011 at 7:31 AM, <span
dir="ltr"><<a
moz-do-not-send="true"
href="mailto:baszero@gmail.com"
target="_blank">baszero@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin: 0pt 0pt 0pt
0.8ex; border-left: 1px solid
rgb(204, 204, 204);
padding-left: 1ex;">
<div bgcolor="#FFFFFF">
<div>hi michael </div>
<div><br>
</div>
<div>i would rather store it
in the user profile xml
and not in the meta
property. </div>
<div><br>
</div>
<div>cheers<br>
<br>
<div><br>
</div>
_____________________
<div> CTO / <span>Zwischengas
AG</span></div>
<div><a
moz-do-not-send="true"
href="http://www.zwischengas.com" target="_blank">www.zwischengas.com</a></div>
<div><br>
</div>
<div>Sent via iPhone</div>
</div>
<div>
<div>
<div><br>
On 16.05.2011, at
23:04, Michael Wechner
<<a
moz-do-not-send="true"
href="mailto:michael.wechner@wyona.com" target="_blank">michael.wechner@wyona.com</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div> Hi Balz<br>
<br>
On 5/16/11 5:06 PM,
basZero wrote:
<blockquote
type="cite">Hi
Michael,
<div><br>
</div>
<div>as just
discussed, what
I meant by
"auto-login" is
not just
pre-filling the
username field
in the login
form.</div>
</blockquote>
<br>
sorry, right, I
misunderstood<br>
<blockquote
type="cite">
<div>By
"auto-login", I
mean the
following:</div>
<div><br>
</div>
<div>- the user
accesses ANY
page within my
realm</div>
<div>- at every
request it is
verified whether
the user is
logged in
(means:
getIdentity() !=
null ?)</div>
<div>- if there is
no identity
available, the
request is
checked for the
autologin cookie</div>
<div>- if there is
no autologin
cookie, proceed
as usual (= user
remains
anonymous)</div>
<div>- if there IS
an autologin
cookie, the user
gets
authenticated
automatically
(without seeing
any form or the
need of pressing
a submit button)
and the user is
logged in.</div>
</blockquote>
<br>
sounds good also
from a
peformance/scalability
point of view,
except it's unclear
to me where<br>
we should save the
tokens persistently
and how to clean
them if they have
expired.<br>
<br>
I guess we could
save them together
with the user
profile, e.g.<br>
<br>
getRealm().getIdentityManager().getUserManager().getUser("baszero").setProperty("autologin-token",
TOKEN-ID);<br>
<br>
WDYT?<br>
<br>
Thanks<br>
<br>
Michael<br>
<br>
<blockquote
type="cite">
<div><br>
</div>
<div><b>Implementation:</b></div>
<div>The standard
way of how this
usually gets
implemented is
as follows:</div>
<div>- The cookie
contains USERID,
TOKEN</div>
<div>- After every
successful
authentication,
a new TOKEN gets
created and
stored in the
COOKIE (for the
next time). The
realm also
stores the new
token for this
user (so that it
can be verified
the next time).</div>
<div>- How to do
the
authentication:
the token from
the cookie must
match the last
stored token for
this user. if it
matches, the
user gets logged
in without the
need of the
password.</div>
<div><br>
</div>
<div>A normal side
effect of this
implementation
is: </div>
<div>- if the user
uses a web
browser and for
instance an
iPad, every time
he switches the
device, the
token obviously
does not match
anymore and he
has to login by
the usual login
form where he
enters username
and password
(and where he
can checkbox the
autologin
feature again).</div>
<div><br>
</div>
<div><b>Next steps
for Yanel:</b></div>
<div>It would be
great if this
functionality
could be plugged
into the request
pipeline of
Yanel.</div>
<div>An
alternative is
to write a
Request Pipeline
Filter for
TOMCAT so that
the request goes
through that
servlet each
time.</div>
<div><br>
</div>
<div>What do you
propose?</div>
<div><br>
</div>
<div>Cheers</div>
<div>Balz</div>
<div><br>
</div>
<div><br>
<div
class="gmail_quote">On
Mon, May 16,
2011 at 4:48
PM, Michael
Wechner <span
dir="ltr"><<a
moz-do-not-send="true" href="mailto:michael.wechner@wyona.com"
target="_blank">michael.wechner@wyona.com</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:
0pt 0pt 0pt
0.8ex;
border-left:
1px solid
rgb(204, 204,
204);
padding-left:
1ex;">Hi Balz
<div><br>
<br>
On 5/16/11
4:09 PM,
basZero wrote:<br>
<blockquote
class="gmail_quote"
style="margin:
0pt 0pt 0pt
0.8ex;
border-left:
1px solid
rgb(204, 204,
204);
padding-left:
1ex;"> Hi
Michael,<br>
<br>
you once
mentioned that
Yanel comes
out of the box
with an auto
login feature?<br>
Can you point
me to the
source code? I
didn't find
it.<br>
</blockquote>
<br>
</div>
Have a look at<br>
<br>
src/webapp/src/java/org/wyona/yanel/servlet/security/impl/DefaultWebAuthenticatorImpl.java<br>
<br>
and search for<br>
<br>
remember-my-login-name<br>
<br>
(also see
rememberLoginNameCookie.setMaxAge(86400);
// 1 day is
86400 seconds)<br>
<br>
(also see
src/webapp/xslt/login-screen.xsl)<br>
<br>
HTH<br>
<br>
Michael
<div>
<div><br>
<blockquote
class="gmail_quote"
style="margin:
0pt 0pt 0pt
0.8ex;
border-left:
1px solid
rgb(204, 204,
204);
padding-left:
1ex;"> <br>
I just want to
see how it is
done.<br>
<br>
Cheers<br>
Balz<br>
</blockquote>
<br>
</div>
</div>
<font
color="#888888">
-- <br>
Yanel-development
mailing list <a
moz-do-not-send="true" href="mailto:Yanel-development@wyona.com"
target="_blank">Yanel-development@wyona.com</a><br>
<a
moz-do-not-send="true"
href="http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development"
target="_blank">http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development</a><br>
</font></blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div>
</blockquote>
<blockquote type="cite">
<div><span>-- </span><br>
<span>Yanel-development
mailing list <a
moz-do-not-send="true"
href="mailto:Yanel-development@wyona.com" target="_blank">Yanel-development@wyona.com</a></span><br>
<span><a
moz-do-not-send="true"
href="http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development"
target="_blank">http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development</a></span></div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<br>
--<br>
Yanel-development mailing list <a
moz-do-not-send="true"
href="mailto:Yanel-development@wyona.com"
target="_blank">Yanel-development@wyona.com</a><br>
<a moz-do-not-send="true"
href="http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development"
target="_blank">http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<br>
--<br>
Yanel-development mailing list <a moz-do-not-send="true"
href="mailto:Yanel-development@wyona.com">Yanel-development@wyona.com</a><br>
<a moz-do-not-send="true"
href="http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development"
target="_blank">http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-development</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>