在Spring框架中,是否可以同时拥有两种登录实现方式,即表单登录和基于证书的登录(x509)?我尝试过这两种方法中的任意一种,但将它们同时组合使用对我来说很难做到。有没有什么方法可以启用这两种方法?有哪些书籍或网站可以参考这方面的内容呢?谢谢。
是的,可以通过将SSL客户端认证设置为可选来实现。 这篇Baeldung文章是一篇关于使用X.509证书启用SSL客户端认证的好教程,其中强制执行客户端认证(对于您的情况,具有登录表单回退不好)。请按照该教程并注意在application.properties文件中将客户端认证设置为want而不是need,这将使客户端-服务器SSL握手尝试要求证书。server.ssl.client-auth=want 如果浏览器没有提供证书(没有配置任何证书或用户在提示选择证书列表时点击取消),SSL握手将在没有客户端证书的情况下完成,用户将必须使用用户名+密码登录。 如果用户选择了证书,则使用客户端证书进行SSL握手。然后,服务器会在信任库中验证给定的证书。如果证书有效,则成功建立SSL握手。否则,服务器拒绝连接。 请注意: 仅使用X.509证书进行身份验证。对于授权,您必须提供X509Configurer的UserDetailsService实现,以检索通过x.509刚刚验证的用户的UserDetails。 因此,如果您有一个包含分配角色的用户数据库,即使证书在信任存储中,用户可能也不在用户数据库中,因此您需要在应用程序逻辑中处理这种可能性。即当SSL连接是相互的,但用户不存在于用户数据库中时。
是的,这是可能的。你所需要做的就是在你的http配置中声明x509支持: <http ...> ... <x509 ... /> .... </http> 并在Tomcat中配置SSL。 请参见此条目和此线程。