У меня есть безстоящий EJB WebService.Получить IP-адрес клиента в Stateless EJB
WS интерфейс: реализация
@Remote
@WebService
public interface WSInterface{
@WebMethod
public String[] WSMethod(@WebParam(name="arg0") String arg0)
}
WS:
@WebService
@Stateless
public class WSImpl extends GenericSessionBean implements WSInterface {
@WebMethod
public String[] WSMethod(String arg0)
{
return ...;
}
}
И мне нужно, чтобы получить IP-адрес клиента в WSMethod. Я пытался получить его таким образом (он работает в «общем» WebService):
@Resource
private SessionContext ctx;
public String[] getProperties() {
List propList = new ArrayList();
MessageContext mc = ctx.getMessageContext();
Iterator props = mc.getPropertyNames();
for (String prop = (String)props.next(); props.hasNext(); prop = (String)props.next())
{ propList.add(prop); }
return propList.toArray(new String[propList.size()]);
}
Но никакого успеха: нет свойства с именем REMOTE_ADDR
в MessageContext
.
Есть ли способ получить REMOTE_ADDR
в @Stateless
EJB?
@Resource private WebServiceContext ctx; ... MessageContext mc = ctx.getMessageContext(); HttpServletRequest request = (javax.servlet.http.HttpServletRequest) mc.get (MessageContext.SERVLET_REQUEST)); Строка clientIP = request.getRemoteAddr(); – callfarc0de
Это так странно, но теперь ваше решение работает! Я помню, что раньше я уже пробовал WebServiceContext, но компилятор дал мне ошибку. Теперь он работает по мере необходимости. Благодаря! – Shniperson