メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年6月15日月曜日

[Apache Shindig][お勉強][OpenSocial] メモ14 AuthenticationServletFilter

Shindigには


org.apache.shindig.auth.AuthenticationServletFilter
 

という、Filterがある。
で、これは何をしているか、読んでみた。

ソースは、

./java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java
 



for (AuthenticationHandler handler : handlers) {
SecurityToken token = handler.getSecurityTokenFromRequest(req);
if (token != null) {
new AuthInfo(req).setAuthType(handler.getName()).setSecurityToken(token);
callChain(chain, req, resp);
return;
} else {
String authHeader = handler.getWWWAuthenticateHeader(realm);
if (authHeader != null) {
resp.addHeader("WWW-Authenticate", authHeader);
}
}
 

ってところを見ると、securityTokenが取れない場合は、
WWW-Authenticate: relm="shindig"
とかが返りそう。
AuthInfoしだいだろうけど。


} catch (AuthenticationHandler.InvalidAuthenticationException iae) {
Throwable cause = iae.getCause();
logger.log(Level.INFO, iae.getMessage(), cause);

if (iae.getAdditionalHeaders() != null) {
for (Map.Entry entry : iae.getAdditionalHeaders().entrySet()) {
resp.addHeader(entry.getKey(), entry.getValue());
}
}
if (iae.getRedirect() != null) {
resp.sendRedirect(iae.getRedirect());
} else {
// For now append the cause message if set, this allows us to send any underlying oauth errors
String message = (cause==null) ? iae.getMessage() : iae.getMessage() + cause.getMessage();

resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, message);
}
}
 

で、AuthenticationHandler.InvalidAuthenticationExceptionなら、
AuthenticationHandlerなりで作られたヘッダを、ぼこぼこresponseにセットして、
Redirectするなり、401を返すと。
InvalidAuthenticationException経由で401を返すか、Redirectするか
できるっぽいと。


.

0 コメント: