如果在春季预验证成功,如何绕过表单登录过滤器?

时间:2016-02-10 06:14:51

标签: spring-mvc spring-security pre-authentication

如果预身份验证过滤器成功从请求中提取用户信息,是否可以绕过表单登录过滤器?如果传入请求未经过预先验证,则表单登录过滤器将用作后备。

我正在开发一个spring mvc应用程序,它有一个标准的登录页面,有两个自定义过滤器和一个身份验证提供程序,定义如下:

<security:http>
  <security:custom-filter position="FORM_LOGIN_FILTER" ref="loginFilter"/>
  <security:custom-filter after="FORM_LOGIN_FILTER" ref="postAuthFilter"/>
</security:http>

<bean id="loginAuthProvider" class="com.auth.LoginAuthProvider" />

<security:authentication-manager alias="authManager">
  <security:authentication-provider ref="loginAuthProvider" />
</security:authentication-manager>

我添加了第三个过滤器和另一个提供程序来处理预先验证的请求:

<bean id="preAuthFilter" class="com.auth.PreAuthFilter" >
  <property name="authenticationManager" ref="authManager" />
</bean>

<security:http>
  <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter"/>
  <security:custom-filter position="FORM_LOGIN_FILTER" ref="loginFilter"/>
  <security:custom-filter after="FORM_LOGIN_FILTER" ref="postAuthFilter"/>
</security:http>

<bean id="preAuthProvider" class="com.auth.PreAuthProvider" />
<bean id="loginAuthProvider" class="com.auth.LoginAuthProvider" />

<security:authentication-manager alias="authManager">
  <security:authentication-provider ref="preAuthProvider" />
  <security:authentication-provider ref="loginAuthProvider" />
</security:authentication-manager>

但是,即使预身份验证提供程序明确将authenticated标志设置为true,也会调用登录表单过滤器:auth.setAuthenticated(true);

0 个答案:

没有答案