1

我的 Web 应用程序使用预身份验证方法。当请求到达我的应用程序时,userPrincipal 已正确设置。我知道它没有使用 Java EE 容器安全性,它使用的是在 Apache Web 服务器上配置的一些模块。

因此,我不确定使用什么预认证方法。理想情况下,我想要类似于的东西,RequestHeaderAuthenticationFilter除了它只是从请求中读取 userPrincipal 而不是标头。

是否有开箱即用的机制来实现这一目标?

4

1 回答 1

1

只需扩展然后注册AbstractPreAuthenticatedProcessingFilter,一切都在文档中:

public class RequestPreAuthenticatedProcessingFilter
    extends AbstractPreAuthenticatedProcessingFilter {

  private static final String USER_PRINCIPAL_KEY = "";

  @Override
  protected Object getPreAuthenticatedPrincipal(final HttpServletRequest request) {
    return request.getAttribute(USER_PRINCIPAL_KEY);
  }

  @Override
  protected Object getPreAuthenticatedCredentials(final HttpServletRequest request) {
    return "N/A"; // or whatever you need
  }
}

在 security-context.xml 中:

<security:http>
  <!-- Additional http configuration omitted -->
  <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
</security:http>

<bean id="preAuthFilter"
    class="com.example.RequestPreAuthenticatedProcessingFilter">
  <property name="authenticationManager" ref="authenticationManager">
</bean>
于 2012-09-05T22:27:41.453 回答