Spring Security - 用户在所有安全页面/视图成功验证后,根据业务逻辑重定向

时间:2013-06-25 16:06:50

标签: spring-mvc spring-security

Newbie Spring MVC /安全问题。我已设法实现Spring Security来管理用户安全/身份验证。我现在想要为经过身份验证的用户实现业务逻辑,并根据业务逻辑的结果重定向到不同的视图/页面。

例如(假设用户已成功通过身份验证并具有所请求的视图/页面所需的角色):

  • 如果用户尚未验证其电子邮件>显示电子邮件验证 错误视图/页面,其中包含重新发送电子邮件验证电子邮件的链接
  • ELSE如果用户失败了一些其他业务逻辑>显示页面X
  • ELSE如果用户失败了一些其他业务逻辑>显示页面Y
  • ELSE>显示 默认的认证后视图/页面或请求的视图/页面

我已经四处寻找并找到了实现此方法的可能方法(例如自定义authenticationSuccessHandler和Filtering),但我发现的例子我不确定:

a)如何根据业务逻辑的结果重定向到不同的视图/页面

b)该方法是否将处理直接尝试和访问页面的用户(即,通过未验证其电子邮件的身份验证的用户应重定向到“电子邮件验证错误”视图/页面,无论他们尝试访问哪些内容 - 即使他们尝试直接访问(安全)视图/页面)

上述的替代方法是在每个控制器中包含业务逻辑,但这感觉不对,并且确定必须有更优雅的方式来处理此要求

无论如何,我很想理解“最佳/标准”的方法(如果存在这样的话!)

1 个答案:

答案 0 :(得分:0)

我认为这是cross cutting concern,所以在我看来你是正确的考虑过滤方法。我不认为实施custom AuthenticationSuccessHandler是正确的方法。通过使用过滤器,您将获得对逻辑适用的URL的控制,而不仅仅是在用户进行身份验证时。

至于如何实现过滤,有几种方法可以配置它,但我不能看到你需要做一些比提供经过充分测试的javax.servlet.Filter实现更复杂的事情。

选项1是将Servlet过滤器配置为Spring Security过滤器链的一部分。 Spring Security是作为一系列过滤器实现的,每个过滤器都有明确定义的角色。 Spring Security允​​许您将自定义过滤器插入此链中,以用于特定于应用程序的安全相关逻辑。 Spring Security文档讨论了这个here

您已经说过,在达到您的业务逻辑之前,您希望用户已经过身份验证并且已经检查了他们的角色,因此您可以将过滤器插入Spring Security过滤器链的后部,依赖于Spring Security过滤实现以强制执行身份验证和角色检查。

另一种方法是直接在web.xml中配置Filter实现,确保仅在受Spring Security保护的URL上调用它。在这里,在web.xml中声明过滤器的顺序将变得很重要,因为您需要确保在调用自定义过滤器之前首先调用Spring安全过滤器链(以确保用户经过身份验证并具有正确的角色)。 / p>