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>>
Re: JAAS + SessionBean (JBoss)
От: Gurney Великобритания www.kharlamov.biz
Дата: 11.03.06 10:03
Оценка:
OneZerOne wrote:
> <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&lt;/module-option&gt;
> <module-option name="principalsQuery">select SYUSR_PASSWORD from SY_USER where SYUSR_NAME=?</module-option>
> </login-module>
> </authentication>
> </application-policy>

Попробуй добавь атрибут rolesQuery. Хотя бы и в виде

select 'USER';
Posted via RSDN NNTP Server 2.0
Re[2]: JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 13.03.06 10:52
Оценка:
Здравствуйте, Gurney, Вы писали:

G>Попробуй добавь атрибут rolesQuery. Хотя бы и в виде


Дело не в этом, был у меня такой запрос. И сейчас его добавил. Дело в том, что как параметера имени пользователя в principalsQuery приходит null, соответственно и в rolesQuery тоже. Возможно что-то с клиентской стороны, однако когда использовали Oracle AppServer, аунтефикация проходила именно таким образом. Там пользователя добавляли через веб интерфейс и все было нормально, правда там была не DB аунтефикация.
... << С уважением, OneZerOne. RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: JAAS + SessionBean (JBoss)
От: C0s Россия  
Дата: 13.03.06 11:10
Оценка:
Здравствуйте, OneZerOne, Вы писали:

OZO>Используется JBoss4.0.4RC1


по jboss конкретно, к сожалению, ничего не посоветую

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


это и есть клиентский код, как я понимаю?
удивлен наличием какого-то GenericApplicationContext — это что-то jboss-зависимое? в норме по общей jee-идее такого быть не должно бы

OZO>Расскажите плиз, где я не прав


бросилось в глаза, что qwe/1 указано для доступа к naming service. но к бинам это как бы не имеет отношения — в общем случае, доступ к NS и бинам — две разные вещи, например, можно не защищать одно и защитить другое. ну и в целом, не видно, где бы интерактивно клиент спрашивал логин-пароль у юзверя
неужели примеров толковых к jboss нет?
Re[2]: JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 13.03.06 11:24
Оценка:
Здравствуйте, C0s, Вы писали:


C0s>это и есть клиентский код, как я понимаю?

C0s>удивлен наличием какого-то GenericApplicationContext — это что-то jboss-зависимое? в норме по общей jee-идее такого быть не должно бы
GenericApplicationContext — это из библиотеки Spring

Сos>ну и в целом, не видно, где бы интерактивно клиент спрашивал логин-пароль у юзверя

Интерактивно пока и не спрашивалось

C0s>бросилось в глаза, что qwe/1 указано для доступа к naming service. но к бинам это как бы не имеет отношения — в общем случае, доступ к NS и бинам — две разные вещи, например, можно не защищать одно и защитить другое.

C0s>неужели примеров толковых к jboss нет?
Вот скорее всего здесь моя ошибка. Если можно простенький пример или линк хороший (именно по клиентской части).
... << С уважением, OneZerOne. RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: JAAS + SessionBean (JBoss)
От: C0s Россия  
Дата: 13.03.06 11:50
Оценка:
Здравствуйте, OneZerOne, Вы писали:

C0s>>это и есть клиентский код, как я понимаю?

C0s>>удивлен наличием какого-то GenericApplicationContext — это что-то jboss-зависимое? в норме по общей jee-идее такого быть не должно бы
OZO>GenericApplicationContext — это из библиотеки Spring

ok, spring-пусть spring, но это не меняет сути
имхо, лучше запускать клиент как jee-клиент (см. http://wiki.jboss.org/wiki/Wiki.jsp?page=J2EEClient)

Сos>>ну и в целом, не видно, где бы интерактивно клиент спрашивал логин-пароль у юзверя

OZO>Интерактивно пока и не спрашивалось

по-моему с этого надо начинать?

OZO>Вот скорее всего здесь моя ошибка. Если можно простенький пример или линк хороший (именно по клиентской части).


уж не знаю, стоит ли рассуждать об ошибках
но вот читать надо отсюда: http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossSX и до вечера
особо задержать пристальный взгляд на ClientLoginModule
Re[4]: JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 13.03.06 12:29
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, OneZerOne, Вы писали:


C0s>имхо, лучше запускать клиент как jee-клиент (см. http://wiki.jboss.org/wiki/Wiki.jsp?page=J2EEClient)


Большое спасибо, логин прошел, дальше доработаю.

Единственный вопрос:
Использую DatabaseServerLoginModule
На стороне сервера ear, в котором ejb-jar.xml, где будут прописаны разрешения на использование методов. Возможно ли их изменять динамически, без редеплоя приложения?
... << С уважением, OneZerOne. RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: JAAS + SessionBean (JBoss)
От: C0s Россия  
Дата: 13.03.06 14:03
Оценка:
Здравствуйте, OneZerOne, Вы писали:

OZO>На стороне сервера ear, в котором ejb-jar.xml, где будут прописаны разрешения на использование методов. Возможно ли их изменять динамически, без редеплоя приложения?


так эти — фиксированы, в рантайме их менять не надо. для перераздачи прав меняют атрибуты, присвоенные пользователям приложения
Re[6]: JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 13.03.06 14:25
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, OneZerOne, Вы писали:


OZO>>На стороне сервера ear, в котором ejb-jar.xml, где будут прописаны разрешения на использование методов. Возможно ли их изменять динамически, без редеплоя приложения?


C0s>так эти — фиксированы, в рантайме их менять не надо. для перераздачи прав меняют атрибуты, присвоенные пользователям приложения


Огромное спасибо
... << С уважением, OneZerOne. RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: JAAS + SessionBean (JBoss)
От: OneZerOne Россия  
Дата: 13.03.06 16:23
Оценка:
Здравствуйте, C0s:

Еще один вопрос по JAAS. Можно ли на сервере (например из бина) получить список активных пользователей, или хотя бы их количество?
... << С уважением, OneZerOne. RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: JAAS + SessionBean (JBoss)
От: C0s Россия  
Дата: 13.03.06 16:34
Оценка:
Здравствуйте, OneZerOne, Вы писали:

OZO>Еще один вопрос по JAAS. Можно ли на сервере (например из бина) получить список активных пользователей, или хотя бы их количество?


это не часть JAAS, если об этом вопрос, и JAAS тут не помощник
а вот позволяет ли сервер каким-то своим проприетарным боком это узнать — про jboss ничего не знаю. так что в общем случае — надо что-то свое писать
на вебе это легко сделать через фильтры, для чистого ejb, видимо, нужны corba-интерцепторы...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.