3

我正在开发一个使用 RESTful 作为 Web 服务的 Java Web 应用程序。现在我想应用 Apache Shiro 来保护我的应用程序。机制是:用户登录成功后,会向客户端返回一个令牌(由用户名、密码和登录时间组合而成)。然后每个单独的 REST 请求都将附加此令牌以在服务器上进行身份验证(无需授权)。但现在我不知道如何配置来接受这个。
顺便说一句,你能给我一些关于 Shiro 和 RESTful 集成的示例吗?谢谢

4

2 回答 2

3

如果 REST 应用程序和 Java Web 应用程序是同一个 Webapp,那么您只需要检查 subject.isAuthenticated()。使用没有密码或用户名的会话 cookie(传递密码不是一个好主意,因为它可能会被盗)。

如果两个部分都在同一个 Webapp 中,则大多数这种行为是默认出现的。

在您的 REST 方法中,您将拥有如下内容:

Subject subject = SecurityUtils.getSubject();
if(subject == null || !subject.isAuthenticated()) {
     return 401; // Not Authorized
}

希望有帮助。

于 2013-09-17T15:29:37.900 回答
0

除了上述响应之外,您还可以从您的 REST 服务器发回一个令牌(会话 ID),在成功登录后发布。然后,您的 iOS/Android 应用程序将需要存储它,并将其与它发出的每个 REST 请求一起发送。以下是您的登录后 REST 响应的示例:

session-start-timestamp: 1394683755389,
session-timeout: 1800000,
session-id: "068C8E0E289788A7ABC5FE47B2CC0D28"

session-id 将由您的 REST 服务器维护,每次带有此 id 的新请求进入时,都会重置其 TTL。

在浏览器上,此 ID 会自动发送。对于您的情况,您可能希望随每个 HTTP 请求显式发送它(这就是 REST 请求)

希望这可以帮助

于 2014-03-13T04:19:08.127 回答