首页 文章

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

提问于
浏览
2

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

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

到目前为止我做了什么 .

  • SSL启用tomcat(我可以访问https://mydomain.com:9443

  • 将客户端证书导入服务器信任库

  • 在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" />
  • 在我的security-context.xml中的 http 下添加了 x509 subject-principal-regex="CN=(.*?)," user-service-ref="customUserDetailService"
< 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"/>
  • 添加 < intercept-url pattern="/upload" requires-channel="https" /> 以保护网址

  • myUserDetailService正在实现UserDetailsService并返回UserDetails对象(我用于基于表单的身份验证的同一个类,基于数据库存储的用户名,密码,ROLES) .

我的问题是什么URL路径(甚至/上传)它总是显示login.jsp页面 .

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

任何帮助将受到高度赞赏 .

1 回答

  • 2

    你必须分开问题:

    • 通过客户端证书身份验证对所有 /upload URL进行身份验证

    • 通过表单身份验证其他URL进行身份验证

    以下配置将允许在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>
    

相关问题