Play Framework 未在初始页面加载时设置 cookie
Play Framework not setting cookie on initial page load
使用播放框架,在初始页面加载时未设置名为 TEST 的 cookie。相反,我看到 set-cookie header 仅用于名为 PLAY_SESSION 的 cookie。当我重新加载同一页面时,这次确实设置了名为 TEST 的 cookie。如果未找到初始 Play session,它是否会在自行设置之前不设置任何 cookie?
@AddCSRFToken
public Promise<Result> post(String version) {
final LaunchRequest launchRequest = new LaunchRequest(request().body().asFormUrlEncoded(), false);
Promise<ConsumerInstance> promiseOfConsumerInstance = null;
try {
promiseOfConsumerInstance = consumerInstanceDAO.getByConsumerKey(new ConsumerKey(launchRequest.getOauth_consumer_key()));
} catch (DataAccessException e) {
Logger.warn(e.getMessage());
}
if (promiseOfConsumerInstance != null) {
Map<String, String> paramMap = launchRequest.toSortedMap();
try {
response().setCookie(
"TEST, CookieUtils.serializeParameters(paramMap), null, "/lti/debug");
} catch (Exception e) {
Logger.warn(e.getMessage(), e);
}
return promiseOfConsumerInstance.map(new ConsumerInstanceFunction(launchRequest)).recover(new RecoverFunction(launchRequest));
}
else {
return null;
}
}
删除 @AddCSRFToken
逻辑解决了这个问题。我只能认为在这种方法中无法以某种方式修改响应,导致我无法对响应做任何事情。我什至无法设置一点 header。此页面已受到保护,因此删除它不是问题,但它如何与 Play 一起使用似乎仍然存在问题,这只是一种解决方法。
使用播放框架,在初始页面加载时未设置名为 TEST 的 cookie。相反,我看到 set-cookie header 仅用于名为 PLAY_SESSION 的 cookie。当我重新加载同一页面时,这次确实设置了名为 TEST 的 cookie。如果未找到初始 Play session,它是否会在自行设置之前不设置任何 cookie?
@AddCSRFToken
public Promise<Result> post(String version) {
final LaunchRequest launchRequest = new LaunchRequest(request().body().asFormUrlEncoded(), false);
Promise<ConsumerInstance> promiseOfConsumerInstance = null;
try {
promiseOfConsumerInstance = consumerInstanceDAO.getByConsumerKey(new ConsumerKey(launchRequest.getOauth_consumer_key()));
} catch (DataAccessException e) {
Logger.warn(e.getMessage());
}
if (promiseOfConsumerInstance != null) {
Map<String, String> paramMap = launchRequest.toSortedMap();
try {
response().setCookie(
"TEST, CookieUtils.serializeParameters(paramMap), null, "/lti/debug");
} catch (Exception e) {
Logger.warn(e.getMessage(), e);
}
return promiseOfConsumerInstance.map(new ConsumerInstanceFunction(launchRequest)).recover(new RecoverFunction(launchRequest));
}
else {
return null;
}
}
删除 @AddCSRFToken
逻辑解决了这个问题。我只能认为在这种方法中无法以某种方式修改响应,导致我无法对响应做任何事情。我什至无法设置一点 header。此页面已受到保护,因此删除它不是问题,但它如何与 Play 一起使用似乎仍然存在问题,这只是一种解决方法。