- 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
- BASIC認証を使う
使うとしたらこれか。
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);