使用Spring 3.1进行混合模式X509身份验证

时间:2013-04-21 19:57:02

标签: ssl spring-security tomcat7 x509

我是Spring的新手,也是SSL身份验证的新手。

我的问题是我有一个Web应用程序可以正常使用基于表单的身份验证。我需要使用SSL客户端身份验证自动验证我的部分应用程序。

到目前为止我做了什么。

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

    Connector port="9443" 
    protocol="HTTP/1.1" 
    SSLEnabled="true"
    maxThreads="150" 
    scheme="https" 
    secure="true"
    clientAuth="want" 
    sslProtocol="TLS" 
    keystoreFile="c:\serverkeystore"
    keystorePass="ChangeIt" />
    
  4. http 下添加 x509 subject-principal-regex =“CN =(。*?),”user-service-ref =“customUserDetailService”我的security-context.xml

    < http auto-config="true" use-expressions="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 logout-url="/j_spring_security_logout" logout-success-url="/loggedout.jsp" delete-cookies="JSESSIONID"/>

  5. 添加&lt; intercept-url pattern =“/ upload”requires-channel =“https”/&gt; 以保护网址
  6. myUserDetailService 正在实现UserDetailsS​​ervice并返回UserDetails对象(我用于基于表单的身份验证的同一个类,基于数据库存储的用户名,密码,ROLES)。
  7. 我的问题是什么是URL路径(甚至/上传)它总是显示login.jsp页面。

    我使用Spring和Spring安全性3.1.3与tomcat 6.0.35

    任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

你必须分开问题:

  1. 通过客户端证书身份验证对所有/upload个网址
  2. 进行身份验证
  3. 通过表单身份验证其他URL进行身份验证
  4. 以下配置将允许在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>