Newbie Spring MVC /安全问题。我已设法实现Spring Security来管理用户安全/身份验证。我现在想要为经过身份验证的用户实现业务逻辑,并根据业务逻辑的结果重定向到不同的视图/页面。
例如(假设用户已成功通过身份验证并具有所请求的视图/页面所需的角色):
我已经四处寻找并找到了实现此方法的可能方法(例如自定义authenticationSuccessHandler和Filtering),但我发现的例子我不确定:
a)如何根据业务逻辑的结果重定向到不同的视图/页面
b)该方法是否将处理直接尝试和访问页面的用户(即,通过未验证其电子邮件的身份验证的用户应重定向到“电子邮件验证错误”视图/页面,无论他们尝试访问哪些内容 - 即使他们尝试直接访问(安全)视图/页面)
上述的替代方法是在每个控制器中包含业务逻辑,但这感觉不对,并且确定必须有更优雅的方式来处理此要求
无论如何,我很想理解“最佳/标准”的方法(如果存在这样的话!)
答案 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>