JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 10.03.06 14:04
Оценка:
Используется JBoss4.0.4RC1
Необходимо сделать аунтефикацию через JAAS, чтобы пользователи хранились в базе данных. Толстый java-swing клиент.

Добавил application-policy
login-config.xml
  <application-policy name="standartEmercomSecurityDomain">
      <authentication>
        <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                    <module-option name="debug">true</module-option> 
          <module-option name="dsJndiName">java:/StandartDS</module-option>
                    <module-option name="principalsQuery">select SYUSR_PASSWORD from SY_USER where SYUSR_NAME=?</module-option>
        </login-module>
      </authentication>
    </application-policy>



jboss.xml
<?xml version="1.0"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
    "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
    <security-domain>java:/jaas/standartEmercomSecurityDomain</security-domain>
    <enterprise-beans>
      <session>
        <ejb-name>UsersFacade</ejb-name>
          <jndi-name>UsersFacade</jndi-name>
        </session>
            <session>
        <ejb-name>CommonsFacade</ejb-name>
        <jndi-name>CommonsFacade</jndi-name>
      </session>
    </enterprise-beans>
</jboss>



На клиенте получю бины из xml, в котором указываю пользователя "qwe" и пароль "1", в базе такая запись есть.
<beans>
  <bean id="serverTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
      <props>
        <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
        <prop key="java.naming.provider.url">onezerone:1099</prop>
        <prop key="java.naming.security.principal">qwe</prop>
        <prop key="java.naming.security.credentials">1</prop>
            </props>
    </property>
  </bean>

  <bean id="usersService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
        <property name="jndiName" value="UsersFacade"/>
        <property name="businessInterface" value="ru.icl.ios.standart.service.UsersService"/>
        <property name="jndiTemplate" ref="serverTemplate"/>
    </bean>

    <bean id="commonsService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
        <property name="jndiName" value="CommonsFacade"/>
        <property name="businessInterface" value="ru.icl.ios.standart.service.CommonsService"/>
        <property name="jndiTemplate" ref="serverTemplate"/>
    </bean>
</beans>


  String path = "applicationContext-ejb.xml";
    
    ctx = new GenericApplicationContext();
  XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
  xmlReader.loadBeanDefinitions(new ClassPathResource(path));
    ctx.refresh();
    
    ...
    UsersService usersService = (UsersService)ctx.getBean("usersService");
    usersService.ВызовБизнесМетода();


Говорит, что пользователь не найден. Решил узнать, какое все таки имя пользователя передается параметром в principalsQuery и выставил
    <module-option name="principalsQuery">update SY_USER set SYUSR_NOTE=?</module-option>

после чего в поле SYUSR_NOTE пишется NULL


Расскажите плиз, где я не прав
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.