gpt4 book ai didi

java - 在 Action 中检索/更改 url 参数

转载 作者:可可西里 更新时间:2023-11-01 16:37:48 26 4
gpt4 key购买 nike

我从我的前端调用 userPrivateProfile Controller 。路径是 /api/user/private/:id 所以假设我在 /api/user/调用私有(private)/65。在我执行 Controller 之前,请求被 SecurityAuthAction 拦截,我确保请求 header 具有 token ,如果是这种情况,我想将 :id 更改为不同的内容。

Controller.java

  @With(SecurityAuthAction.class)
public Result userPrivateProfile(Long id) {
//LOGIC
}

SecurityAuthAction.java

public Promise<SimpleResult> call(Http.Context ctx) throws Throwable {
String[] authTokenHeaderValues = ctx.request().headers()
.get(AUTH_TOKEN_HEADER);

if ((authTokenHeaderValues != null) && (authTokenHeaderValues.length == 1) && (authTokenHeaderValues[0] != null)) {
Long userId = sessionService
.findUserByToken(authTokenHeaderValues[0]);
ctx.args.put("id",userId.toString());

return delegate.call(ctx);
}

我的问题是

  1. 我无法使用 ctx 检索从原始调用中指定的 :id

  2. 由于我找不到请求参数在哪里,所以我也无法更改它

我尝试遍历 ctx.args map ,但我没有在那里找到任何东西。输出是:

ROUTE_VERB ROUTE_

ACTION_METHOD

ROUTE_CONTROLLER

ROUTE_COMMENTS

ROUTE_PATTERN

GET

userPrivateProfile

controllers.Controller

/api/user/private/$id<[^/]+>

感谢您的帮助:)

最佳答案

不幸的是,Play Framework(当然是 2.1 版)在执行 Action 组合时无法让您轻松访问 URL 查询参数。 This discussion on the Play Google group您可能会感兴趣。其中提到的一种解决方法是解析 SecurityAuthAction 中的 URL 以获取 id 查询参数的值。然而,这有点困惑,并且无法帮助您解决问题的下一部分,即在到达下游操作之前更改 id。

在服务器处理请求时更改请求的详细信息对我来说似乎不常见且错误。通常,如果您想更改客户端请求的内容,您会发出 HTTP 303 响应,将它们重定向到您希望它们访问的 URL。但这不像是重定向的情况。我认为您应该做的只是将对 sessionService 的调用推送到您的主 Controller 类:

SecurityAuthAction.java

public Promise<SimpleResult> call(Http.Context ctx) throws Throwable {

if (authorisation token header is present in request) {
return delegate.call(ctx);
}

return unauthorised();
}

Controller .java

@With(SecurityAuthAction.class)
public Result userPrivateProfile(Long id) {

// We've already established that an auth token header is present in the request
final String authToken = ctx.request().headers().get(AUTH_TOKEN_HEADER)[0];
final Long userId = sessionService.findUserByToken(authToken);

// TODO: Proceed...
}

如果 userId 是您在整个应用程序中都需要的东西,那么它可能是包含在您应用程序的 cookie 中的候选对象。

关于java - 在 Action 中检索/更改 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091899/

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