簡體   English   中英

如何將session_id用於REST調用?

[英]How to use session_id for REST calls?

我正在對一個服務進行多個服務調用。 假設我必須對服務進行10次POST調用。 每個服務都需要session_id cookie。 如果未提供,則該服務將生成一個並將其用於所有服務調用。

在我的應用程序中,我進行了多次連續的服務呼叫。 我可以在“循環”中再次調用這些調用,但是單次迭代需要使用不同的session_id。

在代碼中,MyService組件正在進行服務調用。 該服務的過濾器將生成session_id。 但是invoke()方法可能會被多次調用,我希望過濾器為invoke()方法的每次調用生成一個不同的session_id。 目前,session_id生成一次

@Component
class MyService {
    @Autowired
    private RestTemplate restTemplate;

    /**
     * T - is a request type
     * R - is a response class type
    */
    private <T,R> Optional<R> doPost(String url, T request, Class<R> responseType) {
        return Optional.ofNullable(restTemplate.postForObject(url, request, responseType));
    }

    public void invoke() {
         doPost("url1", someRequest1, SomeResponse1.class);
         doPost("url2", someRequest2, SomeResponse2.class);
    }
}

我可以在invoke()方法中創建一個session_id,並確保使用不同的session_id進行這些調用。 invoke()中的所有服務調用將具有相同的session_id,而下一次調用將具有不同的session_id。 但是我不確定這種方法是否是實現此目標的正確方法。

您可以建議我使用什么?

session_id由每個客戶端生成(如果您從其他Web瀏覽器進行測試,您將看到一個不同的session_id),則為每個請求接收不同內容的唯一方法是使會話無效,如果您要求按請求使用uuid,則使用監聽器

public class ProjectRequestListener implements ServletRequestListener {    

 @Override
 public void requestInitialized(ServletRequestEvent requestEvent) {
     requestEvent.getServletRequest().setAttribute("requestId", UUID.randomUUID());
 }

 @Override
 public void requestDestroyed(ServletRequestEvent requestEvent) {
    requestEvent.getServletRequest().setAttribute("requestId", null);
 }
}

並將偵聽器添加到項目web.xml

<listener>
    <listener-class>
    com.project.server.ProjectRequestListener
    </listener-class>
</listener>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM