JAX-WSでの認証

  • StatefulWebServiceManagerを使う

SunのRIでしか使えない。
https://jax-ws.dev.java.net/nonav/jax-ws-21-ea2/docs/statefulWebservice.html

  • HttpServletRequestのセッションを使う

サービスごとの認証になってしまう。
http://weblogs.java.net/blog/ramapulavarthi/archive/2006/06/maintaining_ses.html

使うとしたらこれか。

BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "user");
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pass");

Authenticationヘッダーを自力で解釈する。
GlassFishだとcom.sun.faces.util.Base64とかが使えるのかな。

@Resource WebServiceContext wsc;

をフィールドとして定義しておいて

HttpServletRequest req = (HttpServletRequest)wsc.getMessageContext().get(MessageContext.SERVLET_REQUEST);
String auth = req.getHeader("authorization");
auth = new String(Base64.decode(a.substring(6).getBytes()));
int sep = auth.indexOf(':');
String user = auth.substring(0, sep);
String pass = auth.substring(sep + 1);