Переменные сеанса в Джерси (Java / JBoss) - PullRequest
0 голосов
/ 29 августа 2018

Я разрабатываю веб-сервис RESTful на Java с Джерси и JBoss, и мне нужно хранить «переменные сеанса», как в PHP. Чтобы поддерживать сеанс клиента, но без использования coockies.

@Context
private UriInfo context;

@Context
private HttpServletRequest httpRequest;

@Path("/firstPage")
@GET
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public String createInstance(@QueryParam("instance") String inst) 
        throws JSONException 
{
    // Here I "declare" the session variable
    HttpSession session = httpRequest.getSession(true);
    session.setAttribute("instance", inst);

    // Creation of the DTO (Data Transfer Object)
    JSONObject innerObj = new JSONObject();
    JSONObject outterObj = new JSONObject();

    innerObj.put("ContactID", "{{Contact.Id}}");
    innerObj.put("EmailAddress", "{{Contact.Field(C_EmailAddress)}}");
    outterObj.put("recordDefinition", innerObj);

    return outterObj.toString();
}

@Path("/secondPage")
@GET
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public String validateInstance(@QueryParam("instance") String inst) 
        throws JSONException 
{
    // Here I "validate" the session variable
    HttpSession session = httpRequest.getSession(true);
    if ((String)session.getAttribute("instance") == inst) {
        JSONObject obj= new JSONObject();

        outterObj.put("status", 200);
        outterObj.put("instance", inst);

        return obj.toString();
    } else {
        JSONObject obj = new JSONObject();
        obj.put("error", 401);
        return obj.toString();
    }
}

Вот что я сделал, но он не работает, как я ожидал. Любое решение?

1 Ответ

0 голосов
/ 31 августа 2018

Как уже указывал Сомоне: сеансы обрабатываются с помощью файла cookie, который содержит идентификатор сеанса, который php использует для подключения клиентов к сеансам.

Для вашего отдыха на Java. сеансы по определению не являются частью услуг отдыха и даже не приветствуются.

Пожалуйста, обратитесь к оригинальному документу из поля об остальной архитектуре: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

5.1.3 Без гражданства

Затем мы добавляем ограничение к взаимодействию клиент-сервер: связь должна быть без сохранения состояния, ... любой запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса, и не может использовать любые сохраненные данные. контекст на сервере. Поэтому состояние сеанса полностью сохраняется на клиенте.

Есть ли какая-либо причина воздерживаться от создания созданных данных между запросами и присоединения их ко второму запросу?

...