我试图找到一种简单灵活的方法将JaaS身份验证添加到REST。我发现了一个post,我认为它带领我走向正确的方向(请参阅StevenC的回答)。听起来像servlet容器负责安全性,而不是Jersey代码本身。我喜欢这个想法,但需要一些实施指导。在泽西灰熊上使用JaaS
Grizzly是我的servlet容器,我想将其配置为使用JaaS进行身份验证。现在,一个简单的用户名/密码组合就可以,并且直接在代码中直接对用户名/密码对进行硬编码是没有问题的。只要它使用JaaS,我们可以稍后改进这些细节。至于通过HTTP发送的内容,我认为存储cookie是实现这一切的最简单方法。无论如何都要将身份验证垃圾从我的Jersey代码中删除。
下面的代码到目前为止开始灰熊:
final String baseUri = "http://localhost:9998/";
final Map initParams = new HashMap();
initParams.put("com.sun.jersey.config.property.packages",
"my.jersey.Service");
System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
System.out.println(String.format(
"Jersey app started with WADL available at %sapplication.wadl\n"
+ "Try out %shelloworld\nHit enter to stop it...", baseUri, baseUri));
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);
如果这整个过程中的工作,有什么检查权限用户的最佳方法是什么?我可能会希望我的REST代码在某些地方实际验证权限。我是否在正确的轨道上?有更容易的方法吗?链接到教程将是一个很好的答案。即使像“我做到了这一点,它的工作原理”这样的答案,也会给我一个温暖的模糊,我正朝着正确的方向前进。
感谢您的任何帮助。
编辑:一些澄清的StevenC的评论:
- 你仍想使用Servlet过滤器来保护您的资源?我将使用任何可以从Jersey代码中分离出认证细节的东西。它不一定是servlet过滤器。
- “配置为使用JaaS”是什么意思?最初的计划是使用JaaS来保护当前的API。下一阶段将使整个API在线提供。围绕API调用使用Jersey包装器似乎很有意义,但保持由Grizzly处理的认证。在我相信的时候,灰熊将不得不与JaaS互动。
- 您是否认为应该有一些简单的配置才能保护您的资源?我正在考虑对用户进行身份验证以及基于角色授权用户访问资源的两个步骤。这个想法是让Grizzly处理认证(使用JaaS)和Jersey处理授权。
- “我不认为需要使用带有RESTful资源的Cookie。”删除cookies的使用会很棒,但是如何完成?系统需要知道用户是否被认证。我宁愿不要求他们通过每个电话的用户名/密码/等。甚至在每次调用时将会话标记作为参数传递都显得很“丑陋”。
此外,请注意,我是REST的新手。我一直在做SOAP几年,所以我可能会有一种“SOAP偏见”,可能会让我不知道每个人都使用的简单明了的解决方案。如果有更简单的方法,请随时分享。我只是尽量学习。
我也许应该张贴我的答案之前评论,但是这个问题需要一点澄清: - 你仍然想使用Servlet过滤器来保护您的资源? - “配置为使用JaaS”意味着什么?你是否认为应该有一些简单的配置让灰熊保护你的资源? - JaaS本身只是一个框架,你必须插入一些认证“领域”或来源(用LoginModule实现)。 - 我没有看到使用RESTful资源的cookie的必要性(假设这是你想使用球衣的)。 – StevenC 2009-11-09 01:10:06
@ User1,你有没有经历过这个项目?我一整天都在撕掉我的头发,以获得HTTP身份验证工作。 (刚刚发布了一个[类似问题](http://stackoverflow.com/questions/14608162/basic-http-authentication-with-jersey-grizzly)今天早些时候。) – aioobe 2013-01-30 19:55:04
我不认为我得到它的工作。抱歉。我一直在用骆驼做Jetty。这是一个完全不同的范例,但对我的情况更好。作为提示,我避免了HTTP身份验证,并使用会话。用户必须以某种形式登录,然后将该会话授予适当的页面。此设计适用于执行会话的任何HTTP服务器。 – User1 2013-01-30 21:25:50