gpt4 book ai didi

android - 如何从可以输入 Spring Security 安全 Web 服务方法的 Android 应用发出请求?

转载 作者:行者123 更新时间:2023-11-30 04:53:13 25 4
gpt4 key购买 nike

我有一个运行 CXF JAX-RS Web 服务的 Spring Security(基于表单的身份验证)Web 应用程序,我正在尝试从一个可以按用户进行身份验证的 Android 应用程序连接到此 Web 服务。目前,当我向我的 web 服务方法添加 @Secured 注释时,对该方法的所有请求都被拒绝。我试图从 android 调用中传递有效用户/密码的凭据(当前存在于基于 Spring Security 的 Web 应用程序中,并且可以成功登录到 Web 应用程序)但是当@时请求仍然无法进入此方法存在安全注释。调用 getUserPrincipal() 时,SecurityContext 参数返回 null。

如何从可以进入 Spring Security 安全网络服务方法的 Android 应用发出请求?

这是我目前正在使用的代码:

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();
}

}

最佳答案

我确实解决了这个问题。在我的例子中,问题是我错误地在 Spring Security xml 文件中的拦截 url 模式配置中为已经在 Spring Security 中跟踪的方法添加了安全注释。

总而言之,它非常简单而且效果很好。唯一的技巧是您的 Android 客户端必须创建静态 DefaultHttpClient,使用该客户端调用您网站的登录 servlet,然后使用相同的 httpClient 实例进行所有后续调用。然后,您的 android 请求可以进入安全方法、维护 session 并被视为任何普通用户。

我的原始问题中的以下代码是多余的,我根本不使用它: httpclient.getCredentialsProvider().setCredentials( ...正如我所回避的那样,我也没有使用安全注释,因为我在 xml 文件中保护了我的 url。

关于android - 如何从可以输入 Spring Security 安全 Web 服务方法的 Android 应用发出请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com