【问题标题】:Java EE patterns: authorisation and RESTful service implementationJava EE 模式:授权和 RESTful 服务实现
【发布时间】:2012-06-09 14:02:19
【问题描述】:

我想使用 Tomcat 实现一个基本的 RESTful 服务。 API 需要授权才能使用。授权将通过请求帐户“资源”来实现,例如

some.domain.com/rest/accounts?user=ABC&password=XYZ

如果凭据有效,则会以 JSON 格式重新调整适当的帐户资源,否则将返回 403 类型的空响应。授权完成后,客户端就可以访问API(例如):

some.domain.com/rest/secure/bookings
some.domain.com/rest/secure/friends

但是,我对所有实施选项感到迷茫。我知道我想使用 Spring,但 Jackson 似乎更简单、更容易返回 JSON 对象。

问题:

  1. 即使使用 Jackson 的类也是一种控制器,我是否应该实现 Spring 控制器?或者如果我使用 Jackson,是否不需要 Sping 控制器?

  2. 是否应该使用 Spring-Security、Tomcat 过滤器或带有 Spring 的 AOP 来执行身份验证?

似乎有很多方法可以做事,但我的首要任务是保持简单。

【问题讨论】:

  • 可能是我见过的最伤脑筋的身份验证方式。身份验证不是 REST API 的关注点,而是具有基本、摘要、协商等的底层框架/服务器的关注点。
  • 更不用说在 URL 中发送此类敏感信息的安全漏洞了。

标签: spring jakarta-ee tomcat


【解决方案1】:

可能是我见过的最伤脑筋的身份验证方式。身份验证不是 REST API 的关注点,而是具有Basic、Digest、Negotiate 等的底层框架/服务器的关注点。正如duffymo 已经说过的,Spring Security 是这样做的最自然的方式。

【讨论】:

  • 从答案来看,Spring Security 进行授权。谢谢你。但是杰克逊的使用和控制器的角色呢?使用 Jackson 会取代显式 Spring Controller 的需要吗?
  • 您应该创建了两个单独的问题。 Spring Sec 将同时执行 Authn 和 Authz。杰克逊与控制器无关。你不明白杰克逊的目的。只是来回将 JSON 序列化为 Java。
  • 抱歉,我指的是泽西岛,不是杰克逊。
【解决方案2】:

Jackson 是 JSON 序列化;我看不出它与身份验证/授权有什么关系。

如果您已经在使用 Spring,那么 Spring Security 是很自然的。

还有另一种观点:保持简单。基本身份验证和带有用户名和加密、加盐密码的数据库并不难编写。一个 DAO,你就很好。

是的,身份验证/授权是跨领域问题。最佳放置位置问题的答案取决于您需要在哪里应用和使用它。 Tomcat 过滤器需要 HTTP。你会在控制器或服务层进行身份验证吗?或两者?基于角色的授权呢?这可能很棘手。

【讨论】:

  • 它没有。我只是问当 Spring 可以进行 JSON 序列化时是否可以将 Jackson 与 Spring 一起使用。 Jackson 似乎更容易使用,但是当 Spring 也可以使用另一个库时,感觉很奇怪。
  • Spring 不做任何 JSON 序列化。 Spring 只使用 Jackson、JAXB 或 XStream 之类的库。
  • 这是我的错。我的意思是泽西岛,不是杰克逊!
  • 还是不行,见here
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2015-04-24
  • 2015-04-29
相关资源
最近更新 更多