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.Entryentry : 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 コメント:
コメントを投稿