2013-04-21 62 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