Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring Security-用户根据业务逻辑重定向所有安全页面/视图的成功身份验证_Spring Mvc_Spring Security - Fatal编程技术网

Spring mvc Spring Security-用户根据业务逻辑重定向所有安全页面/视图的成功身份验证

Spring mvc Spring Security-用户根据业务逻辑重定向所有安全页面/视图的成功身份验证,spring-mvc,spring-security,Spring Mvc,Spring Security,新手春季MVC/安全问题。我已经设法实现了Spring安全性来管理用户安全性/身份验证。我现在想为经过身份验证的用户实现业务逻辑,并根据业务逻辑的结果重定向到不同的视图/页面 例如(假设用户已成功通过身份验证,并且具有请求的视图/页面所需的角色): 如果用户尚未验证其电子邮件>显示电子邮件验证 错误视图/页面,带有重新发送电子邮件验证电子邮件的链接 否则,如果用户未能通过某些其他业务逻辑>显示第X页 否则,如果用户未能通过某些其他业务逻辑>显示第Y页 ELSE>显示 默认身份验证后视图/页面或

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

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

  • 如果用户尚未验证其电子邮件>显示电子邮件验证 错误视图/页面,带有重新发送电子邮件验证电子邮件的链接
  • 否则,如果用户未能通过某些其他业务逻辑>显示第X页
  • 否则,如果用户未能通过某些其他业务逻辑>显示第Y页
  • ELSE>显示 默认身份验证后视图/页面或请求的视图/页面
我已经四处搜索并找到了实现此功能的可能方法(例如,自定义authenticationSuccessHandler和筛选),但对于我找到的示例,我不确定:

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

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

上述方法的另一种选择是在每个控制器中包含业务逻辑,但这感觉不太正确,我确信必须有一种更优雅的方式来处理此需求

无论如何,我渴望了解“最佳/标准”方法(如果存在这样的方法!)

我会将其视为一个例子,因此我认为您考虑过滤方法是正确的。我不认为实施一个新的方法是正确的。通过使用过滤器,您将获得对逻辑也适用于哪些URL的控制,而不仅仅是在用户进行身份验证时

至于如何实现过滤,有几种方法可以配置它,但我认为您不需要做比提供经过良好测试的javax.servlet.Filter实现更复杂的事情

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

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


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

筛选器似乎是一个明显的选择,但我仍然不清楚如何使用它将用户重定向到不同的页面/屏幕。这取决于内部业务逻辑的结果。我通过两种方法的组合实现了它:设置会话变量的Post Success处理程序(例如,emailValidated=true/flase Filter检查会话变量emailValidated=true并重定向用户以验证您的电子邮件页面,如果该变量为false,emailvalidation控制器还负责为验证其电子邮件的用户更改emailValidated in会话的状态(通过单击链接)