1

我想在我的 Spring 应用程序中有以下场景:

  • 所有到端口 8440 的连接都具有一侧的 https 身份验证(仅对服务器进行身份验证)
  • 所有到端口 8441 的连接都具有两种大小的 http 身份验证(因此客户端必须提供有效的 X.509 证书)

如何配置我的spring-security.xml文件来实现这一点?理想情况下,我希望能够表达如下内容:

<http port=8441 use-expressions="true">
  <http-basic entry-point-ref="ambariEntryPoint" />
  <intercept-url pattern="/**" access="permitAll()" method="GET"/>
  <intercept-url pattern="/**" access="hasRole('ADMIN')" method="DELETE"/>
  <x509 subject-principal-regex="(.*)" />
</http>
<http port=8440 use-expressions="true">
  <http-basic entry-point-ref="ambariEntryPoint" />
  <intercept-url pattern="/**" access="permitAll()" />
</http>

有办法做到这一点吗?

4

1 回答 1

1

不幸的是,你不能用 Spring Security 做到这一点。客户端身份验证由 Servlet 容器(或它背后的 WebServer)执行。您可以配置两个不同的 Web 应用程序。然后,您需要为第一个应用程序的客户端证书身份验证配置 Servlet 容器,而为第二个应用程序仅配置 SSL。Spring Security 将允许使用<x509>过滤器获取客户端证书信息

于 2013-05-10T17:59:40.327 回答