Zof*_*ren 9 rest jersey parameter-passing http-headers
我正在开发一个REST API,我需要传输密码来为应用程序中的每个请求验证消息(来自密钥的MAC加密).我正在考虑将它们放在消息头中,以避免在包含发布/检索对象(XML或JSON)的消息体中添加非数据信息.
这是最佳做法吗?
我可以在标题中添加所需的参数吗?我读过我必须用"x-"作为前缀.此参数的行为与Path或Query参数完全相同?
我正在使用泽西岛.
谢谢你的帮助.
是的我认为有标头参数来传输某些数据是可以接受的.JAX-RS标准甚至定义了@HeaderParam注释.@HeaderParam的简单示例.
将非标准http标头作为"x-"加上前缀是一种惯例.
我遇到了类似的情况:我需要在每次REST调用时传输用户令牌和应用程序ID.为了避免代码重复,我实现了PreProcessInterceptor
(我正在使用Resteasy),通过它来路由所有REST请求.如果用户令牌无效且用户没有给定应用程序ID的权限,那么我将返回401未授权.我的代码看起来与此类似(简化版):
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16472 次 |
最近记录: |