我有一个运行 CXF JAX-RS Web 服务的 Spring Security(基于表单的身份验证)Web 应用程序,我正在尝试从一个可以基于每个用户进行身份验证的 Android 应用程序连接到这个 Web 服务。目前,当我向我的 web 服务方法添加 @Secured 注释时,对此方法的所有请求都被拒绝。我试图从 android 调用中传递有效用户/密码的凭据(当前存在于基于 Spring Security 的 Web 应用程序中,并且可以成功登录到 Web 应用程序),但是当 @存在安全注释。调用 getUserPrincipal() 时,SecurityContext 参数返回 null。
如何从可以输入 Spring Security 安全 Web 服务方法的 android 应用程序发出请求?
这是我目前正在使用的代码:
安卓通话:
httpclient.getCredentialsProvider().setCredentials(
//new AuthScope("192.168.1.101", 80),
new AuthScope(null, -1),
new UsernamePasswordCredentials("joeuser", "mypassword"));
String userAgent = "Android/" + getVersion();
HttpGet httpget = new HttpGet(MY_URI);
httpget.setHeader("User-Agent", userAgent);
httpget.setHeader("Content-Type", "application/xml");
HttpResponse response;
try {
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
... parse xml
网络服务方法:
@GET
@Path("/payload")
@Produces("application/XML")
@Secured({"ROLE_USER","ROLE_ADMIN","ROLE_GUEST"})
public Response makePayload(@Context Request request, @Context SecurityContext securityContext){
Payload payload = new Payload();
payload.setUsersOnline(new Long(200));
if (payload == null) {
return Response.noContent().build();
}
else{
return Response.ok().entity(payload).build();
}
}