2012-04-04 286 views
1

背景使用Spring Security

我们的网站两级认证允许一个人在使用自己的注册邮箱和密码登录。现在,我们希望允许用户仅使用他们的Facebook身份进行注册(作为替代身份验证方法)。我们打算这样做使用Spring社会+ Spring Security的3.1

问题

有一个在网站上,需要你有一个密码,不管你用什么身份验证提供者的部分。电子邮件注册用户不受此影响,但Facebook用户是(因为他们没有密码)。他们需要生成一个在一个偷懒的办法(第一次Facebook的用户点击链接),因为用户的一小部分将使用这个功能(我们不希望所有Facebook用户被打扰创建密码时,他们寄存器)。

那么,你将如何对此建模?

例如:我们知道可以定义一个名为“REGISTERED_WITH_PASSWORD”的安全角色并使这些页面仅可用于该角色。是否可以设置Spring,当登录的“无密码”Facebook用户尝试进入该页面时,将他重定向到密码创建页面,以便他们可以创建并重试? (而不是将其作为授权例外处理)。

还有其他想法吗?任何优雅的设计都会受到欢迎,不管它是否依赖于Spring Sec 3.1特有的东西。

谢谢

回答

3

朴素实现的想法,也许是更好的方式存在:

  • 写自定义过滤器并将其添加到springSecurityFilterChain
  • 要将过滤器活跃只为URL想手动(如检查URL )
  • 检查用户身份验证类型和'登录/密码通过'标志并重定向Facebook用户无标志登录/密码页
  • 将“登录名/密码通过”标志保存到会话中

SecurityContext保持原样,所以此方法对于春天来说似乎是非侵入性的。

编辑:格式化

+0

关于第三步:您的意思是取消一个重定向过滤器链:? – Sebastian 2012-04-04 22:44:54

+0

@Sebastian,是的,为facebook用户调用'resp.sendRedirect'而不是'chain.doFilter'。 – alexkasko 2012-04-06 06:35:44