2013-04-21 68 views
2

我对Spring和SSL身份验证的新手有点新鲜。混合模式X509使用Spring 3.1进行身份验证

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

我到目前为止做了什么。

  1. SSL允许的Tomcat(我可以访问https://mydomain.com:9443
  2. 导入客户端证书到服务器信任
  3. 更改服务器的XML,使clientAuth = “希望” 在我的server.xml

     
    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. 已添加x509 subject-principal-regex =“CN =(。*?),”user-service-ref =“customUserDetailService” under http在我的安全的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. 添加<截距-URL模式= “/上传” 要求沟道= “HTTPS”/>到安全URL
  6. myUserDetailService正在实施UserDetailsS​​ervice并返回UserDetails对象(基于基于数据库存储的用户名,密码,ROLES,用于基于表单的身份验证的相同类)。

我的问题是什么URL路径(即使有/上传),它总是显示我的login.jsp页面。

我使用Spring和Spring 3.1.3安全使用Tomcat 6.0.35

任何帮助将高度赞赏。

+0

@Michael对不起,我还无法尝试,因为我们忙于其他问题。我会尽快做到。 – Ish 2013-04-28 18:31:53

+0

你测试过它成功了吗? – Michael 2013-05-13 11:32:55

回答

2

你有不同的问题:通过客户端证书身份验证的所有/upload网址

  • 身份验证的形式验证其他网址
  • 分别在

    1. 验证下面的配置将使解决这些问题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> 
      
    +0

    将尝试迈克尔。谢谢! – Ish 2013-04-23 02:57:17