我正在使用 Restlet Java 开发Web服务。
为此我想保护一些web服务免受未经授权的客户端的攻击。所以我写了Filter类。在该Filter类中,我想获取Request的标题。但我收到以下错误 -
java.lang.ClassCastException: org.restlet.engine.http.HttpRequest cannot be cast to javax.servlet.http.HttpServletRequest
编码是 -
public class MyFilter extends Filter {
@Override
protected int beforeHandle(Request request, Response response) {
int result = STOP;
HttpServletRequest httpReq = (HttpServletRequest) request;
String user_token = httpReq.getHeader("auth");
if(user_token.equals("xyz")) {
result = CONTINUE;
}
return result;
}
}
请建议我访问Java Restlet中Request的标头值?
答案 0 :(得分:3)
我用
解决了我的问题Form headers = (Form) request.getAttributes().get("org.restlet.http.headers");
String user_token = headers.getFirstValue("Location");
我发现此http://blog.yudongli.com/2009/12/get-request-header-in-restlet_13.html链接很有用。
答案 1 :(得分:2)
请注意,Restlet为RESTful应用程序提供了一个API。这意味着您可以使用此API访问标准标头。在大多数情况下,您不需要使用名为“org.restlet.http.headers”的属性。
例如,如果要在响应中设置Location标头,请添加以下代码:
getResponse().setLocationRef("http://...");
否则,既然你谈到安全性,Restlet提供了一个支持这种方面的通用API(参见ChallengeAuthenticator,Verifier,Enroler类)。
希望它对你有所帮助。 亨利
答案 2 :(得分:1)
如果您使用的是Restlet 2.1-RC3,这就是获取它的方法
Series<Header> headers = (Series<Header>) getRequestAttributes().get("org.restlet.http.headers");
String auth = headers.getFirstValue("auth");
这正是它对我有用的方式。上面的答案都没有做到。我希望它有所帮助。
答案 3 :(得分:0)
您将如何处理从客户端请求中解析GET标头中的ID? 你会以同样的方式接近这个吗?
自:
Form headers = (Form) getRequestAttributes().get("org.restlet.http.headers");
返回所有标题信息和
String hID = headers.getFirstValue("Location");
获取位置
你将如何处理解析ID?
答案 4 :(得分:0)
Series headers = (Series) getRequestAttributes().get("org.restlet.http.headers");
String origin = headers.getFirstValue("Origin");`
这只是获取Origin标头的一个示例。如果您想获取位置,只需更改为headers.getFirstValue(“Location”);
与新版本的Restlet一样,getRequestAttributes()。get()返回Series而不是Form。