4

我正在使用 Spring 构建一个 WebApp。它由 Spring Security 保护,也应该从 Android 应用程序访问。在网络版中,我使用的是基本登录页面。

要从 Android 进行身份验证,我计划使用凭据向标准身份验证 url /j_spring_security_check 发送一个 http 请求。然后总是在每个新请求中发送 cookie 以保持身份验证。

因为整个 WebApp 只能由登录用户访问,所以每次启动 Session 时都需要登录。我尝试通过一个简单的 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 应用程序发送一个 http 请求,类似于通过发送此 html 表单生成的请求。

但我只是被重定向到我的标准登录页面。我认为这是因为我必须在尝试登录之前从 spring 接收会话 ID。而且我不确定是否有更好的方式从安卓应用程序登录。

这是我在 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>

感谢您对每一个提示的期待!

4

2 回答 2

1

据我所知,应用程序通常是为使用 REST API 而构建的。因为移动应用程序不在网络浏览器中运行,所以这应该是最简单和推荐的方法。您可以观看在谷歌工作的Virgil Dobjanschi所做的讲座。Virgil 一开始就解释了使用 REST API 的优势。使用 HTTP Basic 可以非常轻松地保护 REST API。只需几个步骤,即可将 Spring Security 配置为保护 REST API。

于 2013-10-28T23:17:50.120 回答
1

我有一个(非常)旧的 Web 应用程序,带有 Spring Security,我从一个 Android 应用程序登录,既可以进行 REST-ish 调用,也可以抓取 HTML。

我不确定我所做的是否适用于您的应用程序,但我发现对于我的应用程序,诀窍是首先请求您实际想要访问的页面。

我观察到,当您在未经身份验证的情况下执行此操作时,原始目标会保存在会话中,然后您会被重定向到登录页面。在我的例子中,它实际上是一个“登录/预登录”——这对于你的应用来说几乎肯定是不同的。

一旦我请求了该页面并被重定向,我将登录参数发布到适当的 URL(您必须查看您的登录表单发布到的位置),如果登录成功,我将获得原始页面的重定向那要求。

于 2015-02-13T00:21:30.587 回答