Spring security Spring安全配置导致永久身份验证请求

Spring security Spring安全配置导致永久身份验证请求,spring-security,basic-authentication,Spring Security,Basic Authentication,我已使用以下配置文件配置了我的web应用程序: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframewor

我已使用以下配置文件配置了我的web应用程序:

 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

<security:global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />

<!--
    Filter chain; this is referred to from the web.xml file. Each filter
    is defined and configured as a bean later on.
-->
<!-- Note: anonumousProcessingFilter removed. -->
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
    <security:filter-chain-map path-type="ant">
        <security:filter-chain pattern="/**"
            filters="securityContextPersistenceFilter,
                basicAuthenticationFilter,
                exceptionTranslationFilter,
                filterSecurityInterceptor" />
    </security:filter-chain-map>
</bean>

<!--
    This filter is responsible for session management, or rather the lack
    thereof.
-->
<bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
    <property name="securityContextRepository">
        <bean class="org.springframework.security.web.context.HttpSessionSecurityContextRepository">
            <property name="allowSessionCreation" value="false" />
        </bean>
    </property>
</bean>

<!-- Basic authentication filter. -->
<bean id="basicAuthenticationFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>

<!-- Basic authentication entry point. -->
<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
    <property name="realmName" value="Ayudo Web Service" />
</bean>

<!--
    An anonymous authentication filter, which is chained after the normal authentication mechanisms and automatically adds an
    AnonymousAuthenticationToken to the SecurityContextHolder if there is no existing Authentication held there.
-->
<!--
    <bean id="anonymousProcessingFilter" class="org.springframework.security.web.authentication.AnonymousProcessingFilter">
    <property name="key" value="ayudo" /> <property name="userAttribute" value="anonymousUser, ROLE_ANONYMOUS" /> </bean>
-->

<!--
    Authentication manager that chains our main authentication provider
    and anonymous authentication provider.
-->
<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <property name="providers">
        <list>
            <ref local="daoAuthenticationProvider" />
            <ref local="inMemoryAuthenticationProvider" />
            <!-- <ref local="anonymousAuthenticationProvider" /> -->
        </list>
    </property>
</bean>

<!--
    Main authentication provider; in this case, memory implementation.
-->
<bean id="inMemoryAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="propertiesUserDetails" />
</bean>

<security:user-service id="propertiesUserDetails" properties="classpath:operators.properties" />

<!-- Main authentication provider. -->
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="userDetailsService" />
</bean>

<!--
    An anonymous authentication provider which is chained into the ProviderManager so that AnonymousAuthenticationTokens are
    accepted.
-->
<!--
    <bean id="anonymousAuthenticationProvider" class="org.springframework.security.authentication.AnonymousAuthenticationProvider">
    <property name="key" value="ayudo" /> </bean>
-->

<bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="exceptionTranslationFilter" class="org.springframework.security.web.access.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
    <property name="accessDeniedHandler">
        <bean class="org.springframework.security.web.access.AccessDeniedHandlerImpl" />
    </property>
</bean>

<bean id="filterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
    <property name="securityMetadataSource">
        <security:filter-security-metadata-source use-expressions="true">
            <security:intercept-url pattern="/*.html" access="permitAll" />
            <security:intercept-url pattern="/version" access="permitAll" />
            <security:intercept-url pattern="/users/activate" access="permitAll" />
            <security:intercept-url pattern="/**" access="isAuthenticated()" />
        </security:filter-security-metadata-source>
    </property>
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
</bean>

<bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
    <property name="decisionVoters">
        <list>
            <bean class="org.springframework.security.access.vote.RoleVoter" />
            <bean class="org.springframework.security.web.access.expression.WebExpressionVoter" />
        </list>
    </property>
</bean>

只要我在tomcat上运行我的应用程序,我就会收到一个用户名/密码基本身份验证对话框的请求。即使当我尝试访问:localhost:8080/myapp/version(显式设置为permitAll)时,我也会得到身份验证请求对话框。救命啊

谢谢,,
Sammy

您的过滤器链中有
基本身份验证过滤器
,因此它将尝试对用户进行身份验证。
permitAll
将允许任何用户,但请求仍需要在SecurityContext中有一个用户(从UserDetailsService检索)

如果希望这些URI允许所有访问(即使不验证用户),请执行以下操作:

<intercept-url pattern="/version" filters="none"/>


我理解,谢谢。在这种情况下,哪一个更好:放回匿名身份验证过滤器,还是修改过滤器链ant模式以排除这些URL?因此,如果我理解正确,许可证仅用于授权目的。我可以在我的服务层方法上添加@secure标记吗?我的答案中添加了更多内容-我想这就是你想要的。事实上,我试过了。。。我得到:配置问题:此处不允许使用属性“filters”。