0

我有一个简单的身份验证提供程序,正在尝试与 Spring Security 一起使用。

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
<security:authentication-manager>
    <security:authentication-provider
        ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>

目前,通过上述配置,用户在第一次访问时被重定向到登录页面。我不想要这个重定向。我试图在每次访问页面时都访问此身份验证提供程序。有什么方法可以在不编写额外的自定义代码的情况下完成这项工作?

我猜我需要以某种方式彻底摆脱表单过滤器和基本过滤器。

结果

我让它与下面的配置一起工作。我不得不AbstractPreAuthenticatedProcessingFilter简单地扩展return "";它的两个抽象方法。

<security:http use-expressions="true" entry-point-ref="http403ForbiddenEntryPoint">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
</security:http>
<bean id="preAuthFilter" class="com.hercules.ratinggame.business.security.IpAddressPreAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="http403ForbiddenEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
        ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>
4

1 回答 1

3

当前您使用auto-config="true"这意味着您在引擎盖下配置了很少的过滤器,包括<form-login>带有UsernamePasswordAuthenticationFilter过滤器的元素。

此外,要在每次访问页面时点击此身份验证提供程序,您需要一个可以从请求中获取数据的过滤器(据我所知,IP 地址)。过滤器可能是RequestHeaderAuthenticationFilter或更可能是您自己的AbstractPreAuthenticatedProcessingFilter实现,它可以访问您的身份验证管理器。

总而言之,配置将如下所示:

<security:http use-expressions="true">
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:logout /> <!-- optional -->
    <security:custom-filter position="PRE_AUTH_FILTER"
            ref="ipFromRequestPreAuthenticationFilter" />
</security:http>

<!-- this will probably extend AbstractPreAuthenticatedProcessingFilter -->
<bean id="ipFromRequestPreAuthenticationFilter"
        class="com.example.IpFromRequestPreAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref="ipAddressAuthenticationProvider" />
</security:authentication-manager>
于 2012-09-14T08:17:22.253 回答