2

我对 Spring 有点陌生,也是 SSL 身份验证的新手。

我的问题是我有一个 Web 应用程序,它可以很好地与基于表单的身份验证配合使用。我需要使用 SSL 客户端身份验证自动对我的应用程序的一部分进行身份验证。

到目前为止我所做的。

  1. SSL启用tomcat(我可以访问https://mydomain.com:9443
  2. 将客户端证书导入服务器信任库
  3. 更改 server-xml 并在我的 server.xml 中设置 clientAuth="want"

    连接器端口="9443"
    协议="HTTP/1.1"
    SSL启用=“真”
    maxThreads="150"
    方案="https"
    安全=“真”
    clientAuth="想要"
    sslProtocol="TLS"
    keystoreFile="c:\serverkeystore"
    keystorePass="ChangeIt" />
    
  4. 在我的 security-context.xml 中的http 下添加了 x509 subject-principal-regex="CN=(.*?)," user-service-ref="customUserDetailService"

    < http auto-config="true" 使用表达式="true" >
        < x509 subject-principal-regex="CN=(. ?)," user-service-ref="myUserDetailService" />
       <intercept-url pattern="/upload" requires-channel="https" />
       <intercept-url pattern="/ *" access="hasRole('ROLE_USER')" />
        <form-login login-page="/login.jsp"
                   default-target-url="/index.jsp"
    authentication-failure-url="/login.jsp?error=1" /> < 注销 logout-url="/j_spring_security_logout" logout-success-url="/loggedout.jsp" delete-cookies="JSESSIONID"/>

  5. 添加<intercept-url pattern="/upload" requires-channel="https" />以保护 url
  6. myUserDetailService正在实现 UserDetailsS​​ervice 并返回 UserDetails 对象(我用于基于表单的身份验证的同一类,基于数据库存储的用户名、密码、角色)。

我的问题是任何 URL 路径(即使使用 /upload)它总是向我显示 login.jsp 页面。

我正在使用 Spring 和 Spring security 3.1.3 和 tomcat 6.0.35

任何帮助将不胜感激。

4

1 回答 1

2

你必须分开问题:

  1. 通过客户端证书身份验证所有/uploadURL
  2. 通过表单认证其他网址进行认证

以下配置将允许在 SpringSecurity 3.1 中单独解决这些问题:

<http pattern="/upload/**" >
    <intercept-url pattern="/*" access="hasRole('ROLE_USER')" requires-channel="https"/>
    <x509 subject-principal-regex="CN=(.?)," user-service-ref="myUserDetailService" />
</http>

<http use-expressions="true">
    <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER"/>
    <form-login login-page="/login.jsp" 
           default-target-url="/index.jsp"
           authentication-failure-url="/login.jsp?error=1"  />
    <logout logout-url="/j_spring_security_logout" logout-success-url="/loggedout.jsp" delete-cookies="JSESSIONID"/>
</http>
于 2013-04-22T08:24:46.163 回答