我想获得战争会话的属性(战争A)。 这场战争(战争A)有一个REST服务,返回这个属性。
然后从其他战争(战争B),我呼吁战争A的服务。
战争A的服务代码是:
@Path("/emulado")
@RequestScoped
public class EmuladoRS {
@GET
@Produces("application/json")
@Secure
public EmuladoDTO getAtributtes(@Context HttpServletRequest request) {
String usuarioEmulado = "";
String operatorId = "";
HttpSession sesion = request.getSession();
logger.info("El SessionID es: "+sesion.getId());
SsgUser userAuthenticated = (SsgUser)sesion.getAttribute(ATTRIBUTENAMESESSIONUSERSSG);
usuarioEmulado = String.valueOf(userAuthenticated.getId());
operatorId = (String) request.getSession().getAttribute(ATTRIBUTENAMESESSIONUSEREMULATE);
EmuladoDTO emuladoDTO = new EmuladoDTO();
emuladoDTO.setOperatorId(operatorId);
emuladoDTO.setUsuarioEmulado(usuarioEmulado);
return emuladoDTO;
}
在战争B中对此REST操作的调用是:
String urlRestEmulado= scheme+"://"+ serverName +":" +String.valueOf(serverPort)+"/service/rs/emulado";
URL url = new URL(urlRestEmulado);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Cookie","JSESSIONID="+((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).getId());
BufferedReader br = new BufferedReader(new InputStreamReader(
(connection.getInputStream())));
String output = br.readLine();
if (output!= "null") {
System.out.println(output);
JSONObject json = new JSONObject(output);
emuladoDTO = new EmuladoDTO();
this.emuladoDTO.setOperatorId(json.getString("operatorId"));
this.emuladoDTO.setUsuarioEmulado(json.getString("usuarioEmulado"));
if(this.emuladoDTO.getUsuarioEmulado()!=null&&this.emuladoDTO.getUsuarioEmulado().length()>0) this.usuarioEsEmulado=true;
else this.usuarioEsEmulado=false;
}
确定。问题是如果我通过GET使用REST控制台调用此REST操作或在同一选项卡中键入URL 。该操作返回存储在战争A会话中的正确数据。
{" operatorId":" operador"" usuarioEmulado":" 587"}
但是如果我从战争B中调用java,则返回的JSON有空数据(因为session的属性为null)。
{" operatorId":""" usuarioEmulado":""}
为什么我从战争B调用会话的属性为空,如果我打电话给de url,属性是否正常?
请帮助。