`
leiht
  • 浏览: 1376 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
社区版块
存档分类
最新评论

JBoss4.2.3GA + EJB3.0 + JAAS

阅读更多
    JAAS在网上的评价度不是很高,大家一致认为它比较晦涩难用。虽然如此,但是因为我们开发的项目里用到了JAAS,所以还不得不研究一下。
     所谓JAAS(Java Authentication Authorization Service Java认证与授权服务)就是为了保证Java代码的安全执行而分离出来的一个独立安全模块。它的一个显著的优点就是它被设计成可插入式的,这样就保证了应用程序的独立性。详细介绍请参看http://baike.baidu.com/view/72676.htm
    我这里假设你已经初步了解JAAS机制,然后我主要介绍其在JBoss里如何配置,并如何应用在EJB的Stateless Bean上。具体实现请参考附件。
    1、编写一个主角类,即实现Principle接口的类。接着编写一个角色组类,即实现Group接口的类。写这两个类时和不用JBoss时的写法相同。
    2、写好登录模块,即继承LoginModule接口的类。写这个类时也不用考虑JBoss的因素。
    3、把JAAS配置集成到JBoss里面去。打开<JBOSS安装目录>/server/<default(这里是JBoss启动模式对应的文件夹)>/conf/login-config.xml,参照如下格式添加内容:
   <!-- Deploy Ejb_JBoss_JaasSecurityDomain -->
   <application-policy name="Ejb_JBoss_JaasSecurityDomain">
<authentication>
  <login-module code="jaas.MyLoginModule" flag="required">   </login-module>
</authentication>
   </application-policy>

然后在项目里的src/META-INF下新建jboss.xml,参照如下格式填写内容:
  <jboss>
    <security-domain>Ejb_JBoss_JaasSecurityDomain</security-domain>
  </jboss>

这样我们就完成了JAAS在JBoss中的配置。
    接下来,讨论我们如何在EJB服务里使用该JAAS验证。
    1、首先,需写好一个EJB服务,即Stateless Bean。无需多言。
    2、我们采用注解方式插入JAAS验证模块。这里涉及到的注解有@DeclareRoles、@RolesAllowed、@PermitAll、@DenyAll、@RunAs,这几个注释里面,@RolesAllowed使用最频繁。就我测试发现,@DeclareRoles只起声明作用,就如VB中声明基本变量一样,没有实际意义。而@PermitAll是允许所有通过验证的用户访问,而@DenyAll还未被支持,尚不能使用。具体使用请参考J2EE5API。
    3、写客户端时需要注意:初始化InitialContext的Properties的设置如下:
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
prop.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
prop.put(Context.PROVIDER_URL, "(1)");
prop.put(Context.SECURITY_PRINCIPAL, "(2)");
prop.put(Context.SECURITY_CREDENTIALS, "(3)");
InitialContext ctx = new InitialContext(prop);

其中,(1)处应填写JBoss所在服务器的URL,如"localhost:1099";
      (2)处对应上面所写登录模块(实现LoginModule接口)中的NameCallback(需在代码里添加)的getName()方法;
      (3)处对应上面所写登录模块中的PasswordCallback(需在代码里添加)的getPassword()方法。
    4、使用InitialContext得到所写服务,并调用其中的方法。
   
    休息一下,理理思路,你会发现,在JBoss里使用JAAS并不是一件困难的事。
1
1
分享到:
评论
1 楼 grandboy 2009-05-15  
其实JAAS并不难,只不过每个容器和JDK的实现方式和调用方式都有些不一样的地方。所以新手搞不明白怎么配置。楼主讲解的是在JBoss里应用JAAS, 但是在Tomcat里用,又要换一种配置方法了。

有很多情况,JAAS还是不可以替代的。

相关推荐

Global site tag (gtag.js) - Google Analytics