Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Apache CXF DOSGi进行身份验证和会话管理_Java_Session_Authentication_Cxf_Dosgi - Fatal编程技术网

Java 使用Apache CXF DOSGi进行身份验证和会话管理

Java 使用Apache CXF DOSGi进行身份验证和会话管理,java,session,authentication,cxf,dosgi,Java,Session,Authentication,Cxf,Dosgi,我有一个使用cxf DOSGi[1]的客户机-服务器应用程序。现在,我想从服务器对客户端进行身份验证,并为客户端创建一个会话。客户机将拥有一个cookie,该cookie用于在经过身份验证后访问服务。我想知道服务器访问HTTP会话的最佳方式是什么,以及在经过身份验证后在客户端存储cookie的最佳方式是什么 我正在考虑在经过身份验证后在应用程序级别创建一个自定义会话对象,并向客户端发送一个Cookie对象。因此,当客户端访问服务方法时,它会将cookie作为参数传递。客户端将在每个服务方法中进行

我有一个使用cxf DOSGi[1]的客户机-服务器应用程序。现在,我想从服务器对客户端进行身份验证,并为客户端创建一个会话。客户机将拥有一个cookie,该cookie用于在经过身份验证后访问服务。我想知道服务器访问HTTP会话的最佳方式是什么,以及在经过身份验证后在客户端存储cookie的最佳方式是什么

我正在考虑在经过身份验证后在应用程序级别创建一个自定义会话对象,并向客户端发送一个Cookie对象。因此,当客户端访问服务方法时,它会将cookie作为参数传递。客户端将在每个服务方法中进行验证。但是我不认为这是最好的处理方法,因为每个服务方法都必须有一个单独的参数来传递Cookie

我在谷歌搜索时遇到了这个问题[2]。可以在DOSGi中的服务中获取“WebServiceContext”吗?即使我得到了它,我如何在客户端存储cookie,并确保客户端在随后的每次web服务调用中发送cookie

[1]

[2]

非常感谢您的帮助。
谢谢。

您可以使用自定义意图来控制身份验证。基本上,意图是DOSGi应用于Web服务的CXF特性。您可以在单独的捆绑包中创建要素,然后使用其名称的特殊属性发布要素:请参见

在一个项目中,我们创建了一个功能,该功能读取包含身份验证上下文的threadlocal,并使用其中存储的凭据填充CXF身份验证。因此,您只需在应用程序启动时将凭据存储到threadlocal中一次,所有调用都可以工作


目前对于这个案例没有简单的文档或示例,但我计划在不久的将来创建它,因为身份验证是一个常见的问题。我计划使用shiro作为身份验证框架,并为CXF编写一个通用适配器。我会在准备好后立即添加评论或其他答案。与此同时,你可以试着自己做同样的事情

您是需要会话来创建有状态服务,还是只想用它来维护身份验证?如果只是身份验证,为什么不简单地对每个调用使用基本身份验证呢?我不想要有状态的服务。要求是对用户进行身份验证,只允许授权用户访问服务。要对每个调用使用基本身份验证,客户机必须在每次访问服务方法时传递一个用户令牌。我该怎么做?因为AFAIU我无法从OSGi级别获取Web服务请求信息,所以DOSGi是否可能实现这一点?谢谢您的回答。我有一个问题。客户端如何通过某种令牌发送其身份验证信息?服务器将如何在身份验证阶段提取该信息?最简单的形式是使用InterPetor将用户名和密码设置为CXF中的消息属性,以便http传输身份验证获取。在服务器端,您必须安装一个拦截器来评估凭据并允许或拒绝访问服务。@ChristianSchneider Hi Christian,您决定使用Shiro而不使用JAAS的原因是什么?在我们的项目中,当客户决定使用kerberos单点登录时,我们使用了JAAS登录拦截器。我计划使用Shiro的部分原因是,它在与执行者等交换线程时,对传递登录信息有很好的支持。此外,它听起来比jaas更简单。另一方面,我对shiro的第一次实验还行,但并不比jaas简单多少。所以我还是有点不确定哪种方法最好。我得到了一个更新。在karaf邮件列表中,我们讨论了如何对karaf命令和OSGi服务进行身份验证。我们同意默认使用JAAS。因此,我还将把它添加到CXF中。看见