需要用户登录的MVC页面

时间:2010-03-31 21:19:59

标签: model-view-controller login security

我正在研究一个小的MVC框架,我想知道什么是“最好的方法”来构建东西所以安全的页面/控制器始终确保用户登录(因此自动重定向到登录页面 - 或其他地方 - 如果没有)。显然,有很多方法可以做到,但我想知道什么解决方案是最常见的或被认为是最佳实践。我有一些想法:

  • 在控制器操作方法的开头明确调用user->isLoggedIn()? (似乎太容易忘记并且在发生意外时保留重要页面不安全)
  • 让控制器扩展secureController,始终检查构造函数中的登录名吗?
  • 请求安全信息时,请检查模型吗? (看起来像是多余的电话)
  • 还有其他什么吗?

注意:我在使用PHP,但问题不依赖于语言。

2 个答案:

答案 0 :(得分:5)

ASP.Net MVC很好地使用了需要授权的控制器类的[Authorize]属性

答案 1 :(得分:1)

这不是唯一的方法,但是......

所有客户端请求都转到FilterManager,它根据请求的详细信息构建FilterChain。在FilterChain中,如果资源是需要登录状态的资源,并且客户端未登录,则可以重定向该请求。原始请求可以保存并重定向到登录页面,允许继续原始请求(这是可选的)。

这是一个J2EE设计模式,但是一旦你明白了,就可以用任何语言实现它。在这种情况下,“过滤器”之一是“认证过滤器”。有关该想法的详细信息,请参阅http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html(使用Java)。

这样做的好处是所有页面都会将其逻辑集中在FilterManager中,因此页面只需要调用FilterManager即可。此外,您可以添加调试过滤器/日志记录过滤器/等,以帮助维护/开发您的代码。