ICode9

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

java-rmi ejb调用中可重用登录会话的概念

2019-12-02 00:03:01  阅读:263  来源: 互联网

标签:security jboss ejb-3-0 java


这不是一个简单的问题,只是因为我正在重新考虑通过登录和安全性保护EJB 3.0服务的体系结构.

我们在JBoss 5.1上有一个EJB3.0应用程序,它为SWT客户端提供各种服务以读取和写入数据.要使用服务,客户端必须使用由LDAP服务器中的SpringSecurity查找的有效用户名和密码登录. SpringSecurity会生成一个会话ID,该会话ID将传递回客户端以在任何其他服务调用中重新使用.

client                            server
   |                                |
   |-> login(user/password)-------->|
   |                                |
   | <------- sessionId ------------| 
   |                                |
   |-->serviceXy(sessionId,param1)->|

情况似乎很清楚.我们将sessionId存储在我们自己的上下文对象中,该对象是每个服务方法的第一个参数.每个服务方法上都有一个拦截器,该拦截器从给定的上下文对象中读取sessionId并检查该会话是否仍然有效.客户端需要首先调用登录服务,以获取一个充满sessionId的上下文对象,并在以后的服务调用中重新使用该上下文对象.

public class OurContext {
    private String sessionId;
}


@Stateless
@Interceptors(SecurityInterceptor.class)
public OurServiceImpl implements OurService {

    public void doSomething(OurContext context, String param1) {
        [...]
    }
}

在此解决方案上,我不喜欢的是每种带有上下文参数的服务方法的污染.
是否没有类似的机制,例如rmi调用中的http会话?我正在考虑将上下文对象放在登录后立即在client(?)中创建的某种会话中,并在每次服务调用时传递给服务器,以便SecurityInterceptor可以从此“魔术上下文”读取sessionId ”.

像这样:

OurContext ctx = service.login("user","password");
Magical(Jboss)Session.put("securContext", ctx);
service.doSomething("just the string param");

解决方法:

由于您已经在使用应用程序服务器,因此似乎应该使用内置的EJB安全机制,通常通过JAAS提供.在4.x jboss行中,如果您为jboss实现了自己的JAAS插件,则可以访问“特殊”上下文映射(类似于您描述的内容),该映射在远程请求中传递(由jboss远程调用框架传递) ).我已经有一段时间没有使用jboss了,所以不确定该如何映射到5.1产品,但是我不得不想象它具有类似的功能.当然,这假设您愿意实现jboss特有的功能.

标签:security,jboss,ejb-3-0,java
来源: https://codeday.me/bug/20191201/2084330.html

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

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

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

ICode9版权所有