我手头有设计问题。传统上我一直在使用REST / SOAP服务为数据开发Spring MVC / Struts / jsf应用程序。
现在我们有了HTML5和其他javascript框架。有鉴于此,我们是否还需要创建Spring MVC应用程序(假设数据是从RESTful服务提供的)
如果我继续使用纯HTML5,CSS UI(使用Ajax调用RESTful服务),我可能遇到的问题是什么?这种方法是否存在安全漏洞,例如易于跨站点脚本编写?
开始时这是一个好方法吗?这种方法会被称为单页应用吗?
答案 0 :(得分:1)
您仍然需要从某个地方,w图像和css文件提供单页应用程序。这可能是一个Spring MVC servlet,或者其他什么。
我查看Spring Data REST这是一个为您创建RESTful HATEOAS端点的servlet。
如果您的SPA和REST服务位于同一个域中,可能会更容易,因此您不必担心跨域restrictions。
除非采取反制措施,否则他们仍然容易受到XSS攻击,因为任何系统都是如此。 Spring安全可以在这里提供帮助请务必遵循OWASP guidelines。
使用Hibernate Validator的@SafeHTML
注释来防止不安全的HTML输入到您的数据库中。使用Spring Security的<content-type-options/>
,<xss-protection/>
和<header name="Content-Security-Policy" value="..."/>
设置来帮助对抗XSS。
答案 1 :(得分:1)
Spring MVC,Struts等提供了两个核心功能:路由和绑定。
路由是将HTTP请求分派给相关的代码段。
绑定正在将HTTP请求发送给你的字符串世界转换为更有用的东西,例如不仅包含字符串,而且包含整数和日期的通用Java bean。
此外,还有诸如验证等方面。
最后,它们提供了一个对视图层特别友好的环境。
这个方面本身并没有在您所拥有的所有JSON即将到来且JSON正在回归的世界中过时。您仍然需要路由,但现在您可能不仅仅在请求URL本身上路由,而是在HTTP动词上路由。你仍然需要绑定,让框架将JSON有效负载编组到一些更容易让java工作的地方非常方便。
但是,(我讲的是一般性的,不是具体的,因为我根本不了解Spring或Struts),而MVC框架可以充当后端系统的角色,用于更加面向JSON和原始的HTTP世界,特定的REST框架可以更好地完成工作。
毫无疑问,MVC框架是原始Servlet的重要一步。原始Servlet是功能性的,但对于实际工作来说太简单了。但是,根据10年前世界的设计决策,有些部分显示了它们的年龄,并在更多原始HTTP请求的新世界中受到阻碍。
如果您正在使用混合应用程序,一些MVC和一些HTTP / Ajax方法,那么最好使用您的MVC框架而不是采用新的。
如果你正在做一个纯粹的单页应用程序,那么采用一个倾向于那个利基的框架是值得的。他们只是更合适。
介意,他们也可以并肩生活。如果您愿意,您可以在单个WAR中共同使用,特别是如果要将SPA功能添加到旧应用程序中。它不一定是两种情况。
但我不会仅仅为了处理几个ajax调用而引入一个全新的基础架构组件。最后,它们只是HTTP调用,而MVC框架(与大多数组件框架形成对比)在大多数情况下都可以很好地处理原始HTTP。