java如何访问HTTP基本用户名?
我正在使用这个ContainerRequestFilter检查HTTP基本凭据
private class Filter implements ResourceFilter, ContainerRequestFilter {
@Override
public ContainerRequest filter(ContainerRequest request) {
String auth = request.getHeaderValue("Authorization");
if (auth == null || !auth.startsWith("Basic ")) {
throw new NotAuthorizedException("FAILED\n");
}
auth = Base64.base64Decode(auth.substring("Basic ".length()));
String[] vals = auth.split(":");
String username = vals[0];
String password = vals[1];
boolean validUser = database.Users.validate(username, password);
if (!validUser) {
throw new NotAuthorizedException("FAILED\n");
}
return request;
}
...
}
所以当我到达这一点时,我已经对用户进行了身份验证。现在我怎样才能得到用户名
@GET
@Path("some_kind_of_report_or_something")
@Produces(MediaType.TEXT_PLAIN)
public String fetchAReportOrSomething() {
// At this point, I know that the user has provided good credentials,
// now I need get the user's username as a String
String username = ???;
}
我想我可以使用HttpContext。getRequest()并执行与AuthFilter中相同的操作(我会将用户名/密码提取逻辑移到它自己的方法中)。在过滤器中,我是否可以将提取的用户名存储在请求对象中的某个位置,以便将其传递给该处理程序
(顺便问一下,有没有比我在过滤器中做的更好的方法来提取用户名和密码?如果有,请在评论中告诉我。)
# 1 楼答案
这篇博客文章应该会启发你: http://plaincode.blogspot.pt/2011/07/openid-authentication-example-in-jersey.html
# 2 楼答案
看看它是如何在工作应用程序中完成的:www.s3auth.com。源代码可在github获得。正如你在网站上看到的,facebook和谷歌的身份验证机制被使用。该应用程序使用JAX-RS/Jersey