Play框架如何与Spring Security集成?

5

我是Play框架的新手,想要为我的Web应用程序实现一些身份验证。

我已经有了一些使用Spring和Spring Security的经验,并希望使用它,但我不确定这是否有意义,因为Spring Security主要用于ServletAPI。

将Spring Security集成到Play中是否有意义?

谢谢。

经过进一步搜索,我找到了这篇文章:

https://groups.google.com/d/msg/play-framework/K7l6vHa0UUA/MYDlsaIfJEMJ

似乎是可能的,但仍需要完成许多特定于Play的实现(过滤器等)。

只是好奇,你最终做了什么?我正在研究同样的问题 - 寻找一个强大、经过生产验证的身份验证模型,并发现了Spring Security,我想知道它是否可以与PlayFramework一起使用。 - boggy
我最终使用了Play的Pac4j库:https://github.com/pac4j/play-pac4j 它是一个非常简单的实现,对我来说非常有效。此外,社区非常活跃和支持性强。 - olibur
2个回答

0

或许你应该看一看Deadbolt 2。它是一个专业的解决方案,可以直接使用。


3
Deadbolt2只提供授权部分,您仍需实现或寻找准备好的解决方案来进行身份验证。 - Sergiy Sokolenko

0

是的,使用Spring Security和Play一起使用是有意义的。Spring Security已经被用在很多项目中,编写安全代码比看起来要困难得多。

你有两个问题。一个是认证。你需要做一些事情来实现认证。这意味着要么调整Play使其成为一个有状态的容器(但在这种情况下,为什么要使用Play?),要么将spring-security-web和deadbolt强行结合在一起,以便你使用Spring进行认证,但与Play的cookie功能集成,这样你就不必在服务器端存储东西在会话对象中。我建议你从某个地方获取驱动授权的权限,以便每个请求都可以使用。你想保持会话大小的控制。

Security对象还提供了一些关于如何处理此问题的好提示。

只要你在ThreadLocal或其他地方存储了一个认证对象,Spring中的授权就不难处理。创建一个调用Spring访问决策投票者的包装器的东西 - 类似于

def handleRequest ... {
  withAuthorization(<list of roles necessary>) {
    service code
  }
}

应该可以解决问题。为了增加好处,在执行此操作时在线程本地添加一个标志 - 标志的存在使得在测试中编写需要授权已经发生的断言变得容易。这是开发人员面临的最大安全问题之一 - 请参见https://cwe.mitre.org/data/definitions/862.html

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接