Scala Web 应用程序安全性
Posted
技术标签:
【中文标题】Scala Web 应用程序安全性【英文标题】:Scala web application security 【发布时间】:2011-07-29 03:01:59 【问题描述】:对于 Scala Web 应用程序中的 Web 安全,有哪些好的框架选择。我们想尝试 Scala Web 开发,但还没有找到好的 Scala Web 应用安全框架。
从 Java 方面,我至少了解 Spring Security 和 Apache Shiro。
您有使用 Scala Web 应用程序安全框架或使用 Scala 上下文中的 Spring Security / Apache Shiro 的经验吗?
【问题讨论】:
【参考方案1】:Lift 具有安全性,正如 Lift 的作者 David Pollak 所描述的 here。
【讨论】:
感谢您的回答,但我也在寻找独立于网络框架的通用方法【参考方案2】:我在小型 Scala Web 应用程序中使用了 Spring Security。我在开始学习 Scala 时创建了它,并尝试使用完整的 Java 堆栈:Spring MVC + Spring + Spring Security + Hibernate + BlazeDS(我在这个项目中也将 Flex 用于前端)。现在我可以说这是非常好的和积极的体验。一般来说,问题是 scala 与 Spring 和 Hibernate 的集成有多好。我不得不在实体中使用@BeanProperty
或@BeanInfo
和java 集合。
但我没有遇到任何来自 spring 安全方面的真正问题。它按预期工作。我只记得 Spring AOP 的一个小问题:服务类通过 BlazeDS 将它们的方法发布到 flex 应用程序。我还使用 Spring Security 的对象 ACL(使用 <security:intercept-methods />
和 <security:protect />
)保护它们。当然,由于 AOP 的魔力,所有这些东西都是可能的。所以我注意到这个有线 Spring AOP 的行为——如果你的类实现了一些接口,那么它将使用 JDK 的代理来实现它们并将所有调用委托给目标,但是如果类没有实现任何接口,那么它将使用 cglib 来扩展你的类并委托每个方法调用。问题是我的公共服务类没有实现任何接口,但是 AOP 不能正常工作。原因是所有 Scala 类都实现了ScalaObject
接口。所以我为所有公共服务创建了新的特征来解决这个问题(我还没有找到任何配置 Spring AOP 的方法——似乎这种行为是硬编码的)。
如您所见,将 Spring Security 与 Scala 结合使用不是问题。我相信使用 Apache Shiro 应该更容易,因为它声称完全独立于容器或环境(我听说可以在 Spring 之外使用 Spring Security,但我也听说这很痛苦)。通常,在 Scala 中,您可以在 Java 中归档所有内容。问题是生成的代码会有多漂亮/惯用/纯/无副作用。
顺便说一句,有一个将 Lift 与 Apache Shiro 集成的新项目:lift-shiro。 Here你也可以找到small blog post了解它。
希望这会有所帮助。
【讨论】:
感谢您的回答。关于 ScalaObject 代理的问题真的很值得了解。以上是关于Scala Web 应用程序安全性的主要内容,如果未能解决你的问题,请参考以下文章
应用安全 - Web框架 - Apache Flink - 漏洞汇总
类型安全配置:从打包的 scala 应用程序的外部路径加载附加配置