ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在Grizzly上使用JaaS和Jersey

2019-10-02 05:03:23  阅读:203  来源: 互联网

标签:jaas java rest jersey grizzly


我正在尝试找到一种简单,灵活的方法来向REST添加JaaS身份验证.我找到了一个post,我认为这导致我朝着正确的方向前进(参见StevenC的回答).听起来servlet容器负责安全性,而不是Jersey代码本身.我喜欢这个想法,但需要一点实施指导.

Grizzly是我的servlet容器,我想将其配置为使用JaaS进行身份验证.现在,一个简单的用户名/密码组合就可以了,直接在代码中硬编码用户名/密码对就可以了.只要它使用JaaS,我们就可以在以后优化这些细节.

至于通过HTTP发送的内容,我认为存储cookie将是使这一切全部工作的最简单方法.无论如何使身份验证垃圾远离我的Jersey代码.

这是到目前为止启动Grizzly的代码:


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处理.我相信Grizzly必须与JaaS互动.
>您是否认为应该有一些配置只会导致灰熊保护您的资源?我正在考虑对用户进行身份验证和基于角色的两步流程,授权用户访问资源.我们的想法是让Grizzly处理身份验证(使用JaaS)和Jersey处理授权.
>“我认为不需要使用RESTful资源的cookie.”删除cookie的使用会很棒,但如何实现呢?系统需要知道用户是否经过身份验证.我宁愿不要求他们为每个电话传递用户名/密码/等.甚至在每次调用时都将会话令牌作为参数传递似乎“丑陋”.

另外,请注意我是REST的新手.我已经做了几年SOAP,所以我可能会有一个“SOAP偏见”,这可能会使我从一个每个人都使用的明显,简单的解决方案中眩目.如果有更简单的方法,请随时分享.我只是想尽可能地学习.

解决方法:

我并不完全清楚“将其配置为使用JaaS进行身份验证”的含义.如果有一个简单的配置让灰熊强制执行HTTP身份验证保护URL,我不知道.

我假设从另一个问题并回答你的参考,你想使用servlet过滤器.通常,这是在servlet项目的web.xml文件中配置的. Grizzly当然经常用于从代码启动服务器而不是应用程序配置.当我以这种方式使用grizzly时,我注意到GrizzlyWebContainerFactory没有提供允许你指定servlet过滤器的任何版本的create().但是我确实注意到同一项目中的ServletAdapter [1]确实能够提供这种能力.

至于过滤器本身,遗憾的是我不知道预先构建的servlet过滤器只是将JaaS配置的登录模块插入到您的应用程序中,因此您可能不得不在那里编写一些代码.不过,只需选择基于HTTP的身份验证方法(例如HTTP BASIC,DIGEST等),相应地从请求中提取凭据,然后使用JaaS框架登录.我没有看到RESTful资源特别需要cookie. RESTful架构风格在保持会话时不受欢迎.有很多关于JaaS的教程,所以我不会在这里详细说明.

一旦JaaS主题处于活动状态(消费者成功登录),您就可以使用Subject.getSubject方法获取当前主题并检查活动主体和凭据.

无论如何,这个答案专门用于提供有关使用servlet过滤器执行auth的更多细节,正如您在其他(链接)问题中所要求的那样.这不一定是在球衣webapp中进行身份验证的唯一方法,但这是一种相当简单的方法.我喜欢它,因为它阻止我在每个需要它的资源中注入重复的auth代码.

[1] https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/http/servlet/ServletAdapter.html

标签:jaas,java,rest,jersey,grizzly
来源: https://codeday.me/bug/20191002/1841151.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有