gpt4 book ai didi

java - 如何在 Spring Boot 中的 graphql 突变中从服务器端 api 设置 Cookie?

转载 作者:行者123 更新时间:2023-12-02 02:53:06 26 4
gpt4 key购买 nike

我尝试开发服务器端 API。我正在使用 GraphQL 并希望从服务器端设置 cookie,但是当我尝试使用 HttpServletResponse 设置 cookie 时,它​​给了我一个 NullPointerException?

这是我的响应 View 类:

package org.jembi.appstore.service.graphql.api.response.view;

public class ResponseView {

private int code;
private String message;

public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

我在这里设置 cookie:

@GraphQLMutation(name="login")
public ResponseView login(@GraphQLArgument(name="msisdn") String msisdn, @GraphQLArgument(name="password")String password, HttpServletResponse response) {

ResponseView responseView = new ResponseView();
User user = new User();


System.out.println(msisdn.length());
Cookie cookie = null;
if(msisdn.length()==10) {
user.setPassword(password);
user.setMsisdn(msisdn);

int code = userDao.getUser(user);
responseView.setCode(code);
if(code==100) {
responseView.setMessage("User Logged In Successfully");

cookie = new Cookie("token", UUID.randomUUID().toString());
//responseView.doPost(req, resp);
int hour = 3600000;
int exp = 14 * 24 * hour; //2 weeks

cookie.setMaxAge(exp);
//cookie.setPath("/");
cookie.setHttpOnly(true);
response.addCookie(cookie);
//responseView.setCookie(cookie);

}
else
responseView.setMessage("Invalid credentials");

}else {
responseView.setCode(400);
responseView.setMessage("Bad Request");
}
return responseView;
}

最佳答案

从代码来看,您似乎正在使用 GraphQL SPQR。我无法判断您是否也在使用 SPQR Spring Starter,所以我只能假设您正在使用,因为您的问题没有提及任何内容。

在最近的版本中,DefaultGlobalContext<NativeWebRequest> 的实例自动提供为 GraphQL 上下文,因此可以通过 @GraphQLRootContext 注入(inject):

@GraphQLMutation(name="login")
public ResponseView login(
@GraphQLArgument(name="msisdn") String msisdn,
@GraphQLArgument(name="password")String password,
@GraphQLRootContext DefaultGlobalContext<NativeWebRequest> context) {

HttpServletResponse response = context.getNativeRequest().getNativeResponse(HttpServletResponse.class);
... //do what you need to with the raw HTTP response
}

如果您想提供不同的上下文,请注册一个自定义 bean ServletContextFactory类型。

如果您不使用 SPQR Spring Starter,则必须确保您自己通过 ExecutionInput 提供适用的上下文。 :

ExecutionInput input = ExecutionInput.newExecutionInput()
.query(graphQLRequest.getQuery())
.operationName(graphQLRequest.getOperationName())
.variables(graphQLRequest.getVariables())
.context(response) //HttpServletResponse or whatever you need
.build();

关于java - 如何在 Spring Boot 中的 graphql 突变中从服务器端 api 设置 Cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com