-
是的,我相信有头参数来传输某些数据是可以接受的。JAX-RS标准甚至定义了
@HeaderParam annotation
. 简单的
example of @HeaderParam
.
-
使用“x-”作为非标准http头的前缀是一种约定。
我有一个与你类似的情况:我需要在每次REST调用时传输用户令牌和应用程序ID。为了避免代码重复,我实现了
PreProcessInterceptor
(我正在使用Resteasy),所有REST请求都通过它进行路由。如果用户令牌无效并且用户没有给定应用程序ID的权限,则返回401 unauthorized。我的代码与此类似(简化版):
@Provider
@ServerInterceptor
public class RestSecurityInterceptor implements PreProcessInterceptor {
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
throws UnauthorizedException {
String token = request.getHttpHeaders().getRequestHeader("token").get(0);
// user not logged-in?
if (checkLoggedIn(token)) {
ServerResponse response = new ServerResponse();
response.setStatus(HttpResponseCodes.SC_UNAUTHORIZED);
MultivaluedMap<String, Object> headers = new Headers<Object>();
headers.add("Content-Type", "text/plain");
response.setMetadata(headers);
response.setEntity("Error 401 Unauthorized: "
+ request.getPreprocessedPath());
return response;
}
return null;
}
}