【问题标题】:Play Framework with Spring Security?使用 Spring Security 玩框架?
【发布时间】:2015-01-12 08:31:22
【问题描述】:

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

我已经对 Spring 和 Spring Security 有了一些经验,想用这个,但我不确定这是否有意义,因为 Spring Security 主要是针对 ServletAPI 的。

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

谢谢。

经过进一步搜索,我发现了这篇文章:

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

这似乎是可能的,但仍有很多 Play 特定的实现(过滤器等)必须完成。

【问题讨论】:

  • 只是好奇,你最后做了什么?我正在研究同样的问题 - 寻找一个健壮的、经过生产验证的身份验证模型并遇到了 Spring Security,我想知道它是否可以与 PlayFramework 一起使用。
  • 我最终使用了 Pac4j 库进行 Play:github.com/pac4j/play-pac4j 这是一个非常直接的实现,对我来说非常有用。社区也非常活跃和支持。

标签: java spring scala playframework spring-security


【解决方案1】:

你应该——也许——看看Deadbolt 2。它是专用的解决方案,因此可以开箱即用。

【讨论】:

  • Deadbolt2 仅提供授权部分,您仍然需要实施或找到现成的身份验证解决方案。
【解决方案2】:

是的,在游戏中使用 spring security 是有意义的。 Spring security 已经在很多项目中使用,编写安全代码比看起来要困难得多。

你有两个问题。一是认证。您需要做一些事情来实现身份验证。这意味着要么玩弄游戏,让它成为一个有状态的容器(但话又说回来,在这种情况下你为什么要使用 play 呢?),或者把 spring-security-web 和 deadbolt 互相扔得很厉害,所以你使用 spring 进行身份验证,但是与游戏的 cookie 优点集成,因此您不必将内容存储在服务器端的会话对象中。不过,我建议您从某个地方为每个请求获取驱动授权的权限。您希望减小会话大小。

Security 对象还提供了一些关于如何执行此操作的很好的提示。

只要你有一个存储在 threadlocal 或其他东西中的身份验证对象,spring 中的授权并不难处理。在包装器中创建一些调用 spring 访问决策选民的东西 - 类似于

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2011-10-15
    • 2023-03-21
    相关资源
    最近更新 更多