gpt4 book ai didi

java - 使用 Oltu 传递给 OAuthTokenRequest 时无法使用 @Context HttpServletRequest 检索发布数据

转载 作者:太空狗 更新时间:2023-10-29 22:54:00 27 4
gpt4 key购买 nike

我正在为 Oauth2 使用 Oltu。

当使用@Context HttpServletRequest 请求时,我无法检索发布数据

当我使用@FormParam 时,我能够检索发布数据。

将请求传递给 OAuthTokenRequest

OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);

出现以下错误

{"error":"invalid_request","error_description":"Missing grant_type parameter value"}

在 oltu OAuthTokenRequest 类上调试时,以下代码用于检索参数值

public String getParam(String name) {
return this.request.getParameter(name); // from request it is unable to get post data.As i am getting request object using @Context HttpServletRequest request .
}

据说使用@Context HttpServletRequest 请求无法获取使用@Context HttpServletRequest 请求的发布数据所以,我的问题是

如何在 jax-ws 中获取带有 post 数据的 HttpServletRequest 请求 这样我就可以将 HttpServletRequest 请求传递给 OAuthTokenRequest这是我的代码

@Path("/token")
public class TokenEndpoint {

@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
public Response authorize(@FormParam("state") String state,@Context HttpServletRequest request) throws OAuthSystemException {
try {
// here I am unable to get value of request.getParameter("state")
// but using (@FormParam("state") I am able to get value of post parameter state
request.getParameter("state");
// exception is thrown from following code
OAuthTokenRequest oauthRequest = new OAuthTokenRequest(request);

最佳答案

找到了解决方法(阅读评论)。

OLTU Issue #26

Jersey 正在使用 POST 数据。
解决方案是包装 HttpServletRequest 并覆盖 getParameters()
这是包装器:

public class OAuthRequestWrapper extends HttpServletRequestWrapper {

private MultivaluedMap<String, String> form;

public OAuthRequestWrapper(HttpServletRequest request, MultivaluedMap<String, String> form)
{ super(request); this.form = form; }

@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value == null)
{ value = form.getFirst(name); }
return value;
}
}

这是实现 token POST 方法的方法:

@POST
@Path("/token")
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
public Response token(@Context HttpServletRequest request, MultivaluedMap<String, String> form) {

[...]

OAuthTokenRequest oauthRequest = new OAuthTokenRequest(new OAuthRequestWrapper(request, form));

[...]

}

关于java - 使用 Oltu 传递给 OAuthTokenRequest 时无法使用 @Context HttpServletRequest 检索发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22376810/

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