您是否可以使用Spring 3进行表单和基本身份验证

问题描述:

我希望同时具有表单身份验证和基本身份验证。您是否可以使用Spring 3进行表单和基本身份验证

如果请求像https://username:[email protected]/那样使用基本认证。 如果请求来自https://mysite.com表单身份验证使用。

这可能吗?

+0

您是否确实意味着用户能够在浏览器中使用它,并且具有BASIC类型的行为,没有过期,没有注销等,或者您只是希望能够从命令行工具中启动服务器? – Affe 2010-06-17 16:30:10

是的,这是可能的。

假设您正在使用命名空间配置,这非常简单。默认情况下,如果您在http元素上使用自动配置,它们都会启用。请参阅springsecurity3参考文档的第2.2节。您可以使用http元素上的领域属性为基本身份验证设置自定义领域。表单和基本身份验证都将使用任何身份验证提供程序配置。

如果您未在http元素上使用自动配置,您只需将<http-basic />标记作为子元素添加到http元素即可启用基本身份验证。可能性很好,您对表单身份验证的默认配置不感兴趣,因此标记可能会更复杂一点。

矿看起来像这样:

<form-login login-page="/login.html" 
     default-target-url="/home.html" always-use-default-target="true" 
     authentication-success-handler-ref="authenticationSuccessHandler" 
     authentication-failure-handler-ref="authenticationFailureHandler" 
     login-processing-url="/j_spring_security_check" /> 

显然,这是必要的,以允许对/login.html路径匿名访问。该页面需要呈现提交给/ j_spring_security_check的表单,该表单将被过滤器拦截,查找用户名和密码,并根据配置的身份验证提供程序进行身份验证。如果您深入了解其他名称空间,您会发现可以覆盖字段的名称等。

我不确定spring是否始终默认使用表单验证,除非提供了授权标头在请求中,它缺少有效的用户名/密码对,或者它缺省为第一个过滤器或最后一个,或者是什么。但实验应该可以让你很容易地弄清楚。查看第8章的最后一节和第9章的第一部分,它看起来好像它会将所有未经身份验证的用户发送到表单入口点,除非请求中存在授权标头,在这种情况下,将导致身份验证失败在对客户端的基本身份验证所需响应中。如果您想手动配置所有内容而不是使用命名空间,第8章和第9章也是您看的地方。

身份验证成功处理程序和身份验证失败处理程序必须实现AuthenticationSuccessHandler和AuthenticationFailureHandler,并允许您自定义过滤器如何响应成功和失败的身份验证尝试。他们不是必需的。

我刚刚观看了Ben Alex的Spring Security的介绍。

基本上,他的小应用程序使用表单身份验证,但如果您按照链接,滚动到'29:00',他谈论的基本身份验证支持开箱即用。