2

我有一个 spring security web 应用程序,使用 spring security 3.1 命名空间具有以下应用程序上下文配置:

<security:http create-session="stateless" authentication-manager-ref="authenticationManager">
    <security:intercept-url pattern="/**" access="ROLE_USER" />
    <security:custom-filter ref="restAuthenticationFilter" position="FIRST" />
    <security:http-basic/>
</security:http>

<security:authentication-manager alias='authenticationManager'>
    <security:authentication-provider user-service-ref='customUserDetailsService' />
</security:authentication-manager>

<bean id="restAuthenticationFilter" class="com...security.RestAuthenticationFilter"/>
<bean id="customUserDetailsService" class="com...security.RestUserDetailsService"/>

当我进入浏览器并输入 URLhttp://localhost/rest/user/getByUsername?userName=foo&passWord=bar&deviceId=1234时,我的自定义过滤器被调用,并且用户通过他的用户名、密码和 deviceId 进行身份验证,并且允许他从 URL 中检索他的用户信息。但是,我需要测试这是否适用于同一网络上的 android。因此,如果我这样做ifconfig并从中获取我的本地 IP 地址ifconfig,用它替换 localhost,然后在我的浏览器http://<local ip address>/rest/user/getByUsername?userName=foo&passWord=bar&deviceId=1234中输入我的浏览器中的 URL,然后我得到 HTTP 状态 401 - 需要完全身份验证才能访问此资源并且浏览器会弹出使用用户名和密码登录的弹出表单。

我希望我的应用程序通过远程请求以与 localhost 相同的方式进行授权。

您的帮助将如此,非常感谢。谢谢朋友:)

4

1 回答 1

0

我发现您的配置有问题

<security:custom-filter ref="restAuthenticationFilter" position="FIRST" />

您应该将过滤器放在 CONCURRENT_SESSION_FILTER 之后,以允许正确的 Spring Security 功能。

<security:custom-filter ref="restAuthenticationFilter" after="SECURITY_CONTEXT_FILTER"/>

请看这里: http ://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#ns-custom-filters

于 2013-07-23T06:51:51.200 回答