具有自定义过滤器远程访问的弹簧安全性获取401 HTTP状态401 - 需要完全身份验证,但在使用localhost时则不需要

时间:2013-07-22 20:51:34

标签: spring security filter spring-security

我有一个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"/>

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

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

您的帮助将是如此,非常感谢。谢谢伙伴:)

1 个答案:

答案 0 :(得分: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