我正在使用Spring构建WebApp。它由Spring Security保护,也应该从Android应用程序访问。在网络版中,我使用的是基本登录页面。
要从Android进行身份验证,我计划只使用凭据向标准身份验证url / j_spring_security_check发送http请求。然后总是发送cookie以及每个新的请求以保持身份验证。
由于整个WebApp只能由登录用户访问,因此必须在每次启动会话时登录。我试图通过一个简单的html公式发送描述的请求:
<html>
<head><title>Test</title></head>
<body>
<form action="http://localhost:8080/livefeedback/j_spring_security_check" method="post">
<input type="text", name="j_username" /><br />
<input type="password" name="jpassword" /><br />
<input type="submit" />
</form>
</body>
</html>
为了清楚起见:我想从Android应用程序发送一个类似于通过发送此html表单生成的http请求。
但我只是被重定向到我的标准登录页面。我想这是因为我必须在尝试登录之前从春天收到会话ID。如果有更好的方法从Android应用程序登录,我并不感到害羞。
这是我在spring-security.xml中的http配置:
<http use-expressions="true" auto-config="true">
<intercept-url pattern="/login"
access="permitAll"/>
<access-denied-handler />
<form-login login-page="/login" default-target-url="/"/>
<logout />
</http>
感谢你期待每一个提示!
答案 0 :(得分:1)
据我所知,应用程序通常构建为使用REST API。由于移动应用程序不在Web浏览器中运行,因此这应该是最简单和推荐的方法。您可以观看在Google上运行的Virgil Dobjanschi讲座。 Virgil在一开始就解释了使用REST API的优势。使用HTTP Basic可以非常轻松地保护REST API。只需几个步骤,就可以配置Spring Security来保护REST API。
答案 1 :(得分:1)
我有一个(非常)旧的Web应用程序,使用Spring Security,我从一个Android应用程序登录,既可以进行REST-ish调用,也可以抓取HTML。
我不确定我做的是否适用于您的应用,但我发现在我的应用中,诀窍是首先请求您真正想要访问的页面。
我发现当你在未经身份验证的情况下执行此操作时,原始目标会保存在会话中,然后您将被重定向到登录页面。 就我而言,它实际上是一个“登录/预登录” - 这对您的应用来说几乎肯定是不同的。
在我请求页面并重定向后,我将登录参数发布到相应的URL(您必须查看登录表单的发布位置),如果登录成功,我会获得重定向要求的原始页面。