【问题标题】:Can Spring-Security control Html+JQuery+Json+SpringRoo project?Spring-Security可以控制Html+JQuery+Json+SpringRoo项目吗?
【发布时间】:2012-07-09 16:12:47
【问题描述】:

我使用 HTML+JQuery 作为 UI,Spring-Roo 生成包含 Json 对象字符串转换的服务层。它对我们很有效,就像下面的示例代码:

@RequestMapping(headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<String> ArticleController.listJson() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");
    List<Article> result = Article.findAllArticles();
    return new ResponseEntity<String>(Article.toJsonArray(result), headers, HttpStatus.OK);
}

但是在开发了几个示例页面之后,我有一些问题:

1) 我们想使用 Spring-Security 作为访问控制模块,这个框架可以吗?服务器如何知道它是来自浏览器的同一个会话请求?

2) 代替jsp服务器技术,纯HTML+JQuery真的可以吗?因为我在html中看到很多Ajax代码注入,而且很多不能复用。正如我们所知,服务器技术具有可以最大限度地重用代码的模板。我担心开发困难和维护工作。

PS: Why we decided using HTML+JQuery+Json is because we directly get HTML+CSS from Art designer, 
and we have plan to support different client besides browser, so Json might be a good choice.

谢谢。

【问题讨论】:

    标签: spring-mvc spring-security spring-roo


    【解决方案1】:

    1) 我们想使用 Spring-Security 作为访问控制模块,[...] 服务器如何知道它是来自浏览器的同一个会话请求?

    首先,会话必须以某种方式在服务器端建立。使用标准 Spring Security 登录屏幕或使用 调用spring_security_login。作为回报,服务器将发送一个带有 JSESSIONID 的 cookie。这个 cookie 与每个后续请求(包括 AJAX 请求)一起发送,因此服务器知道哪个用户调用了 REST 方法。这是完全透明的。

    此外,当您注销(通过调用 j_spring_security_logout)时,会话和 cookie 都会被销毁。

    我们成功地使用了这种方法(此外,由于历史原因,我们从 JavaScript 调用 服务!)并且效果非常好。

    2) [...]纯 HTML + JQuery 真的可以吗?因为我在html中看到很多Ajax代码注入,很多不能复用。 [...]

    真正的关注点分离才是王道。将 JavaScript 保存在一个位置 (.js) 文件,将 HTML 保存在另一个位置 (.html)。它们不应该混合在一起。还要让您的 JavaScript 代码分层,并尽可能远离 DOM 操作(例如,使用客户端模板引擎)。

    此外,没有什么可以阻止您在构建期间生成 HTML,因此每个页面中都包含常见的 HTML sn-ps(如页眉和页脚)。

    【讨论】:

    • 谢谢,第一个答案,你的意思是“JSESSIONID”是“透明的”,这是否意味着我们不需要处理这个“JSESSIONID”,它是在服务器和客户端之间自动传递的?对于第二个答案,generating HTML during build 是否意味着它与 jsp 和 asp 技术不同,html 在构建阶段生成?你能告诉我框​​架的名称吗?
    • @JerryCai:更好的是,好的 servlet 容器会将 HttpOnly 标志添加到 JSESSIONID cookie,因此您甚至无法在客户端访问它。但是一旦创建了 cookie,它将与发送到服务器的每个 请求一起传递:包括图像、HTML 和 AJAX 调用。广告。 2:您可以编写ant目标或maven插件来预处理您的HTML模板,例如添加通用标题。
    • 谢谢。好消息。
    猜你喜欢
    • 2011-03-06
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多