Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tomcat DataSourceRealm 
:(
    Опции темы
garbuz
Дата 19.1.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Пытаюсь сделать аутентификацию через Tomcat DataSourceRealm.
Пишу в server.xml
Код

<Realm className="org.apache.catalina.realm.DataSourceRealm" 
        debug="99"
        dataSourceName="jdbc/zeDS"
        userTable="users" userNameCol="username" userCredCol="user_pass"
        userRoleTable="user_roles" roleNameCol="role_name"/>


web.xml
Код

<resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/zeDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>


Context.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ClientApp">

    <Resource
      name="jdbc/zeDS"
      type="javax.sql.DataSource"
      username="root"
      password=""
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      validationQuery="SELECT 1"
      url="jdbc:mysql://127.0.0.1:3306/testdb"
      maxActive="4">
   </Resource>
</Context>


Кидает 
Код

19.01.2009 14:59:04 org.apache.catalina.realm.DataSourceRealm open
SEVERE: Exception performing authentication
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.catalina.realm.DataSourceRealm.open(DataSourceRealm.java:402)
    at org.apache.catalina.realm.DataSourceRealm.authenticate(DataSourceRealm.java:283)
    at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:258)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:417)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:619)



Что не так?


PM MAIL   Вверх
ivg
Дата 19.1.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(garbuz @  19.1.2009,  17:30 Найти цитируемый пост)
Что не так?

Ну как же так? DataSource вы "мапите" на уровне контекста приложения, а Realm прописываете на уровне хоста. Где логика? smile Попробуйте прописать Realm на уровне контекста.
PM MAIL   Вверх
garbuz
Дата 19.1.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(ivg @  19.1.2009,  16:12 Найти цитируемый пост)
Ну как же так? DataSource вы "мапите" на уровне контекста приложения, а Realm прописываете на уровне хоста. Где логика? smile Попробуйте прописать Realm на уровне контекста. 


Код

<Realm className="org.apache.catalina.realm.DataSourceRealm" 
        debug="99"
        localDataSource="true"
        dataSourceName="jdbc/zeDS"
        userTable="users" userNameCol="username" userCredCol="user_pass"
        userRoleTable="user_roles" roleNameCol="role_name"/>


Оно? 

Это сообщение отредактировал(а) garbuz - 19.1.2009, 16:52
PM MAIL   Вверх
ivg
Дата 19.1.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(garbuz @  19.1.2009,  18:22 Найти цитируемый пост)
Оно?  

Да, и плюс, я имелл ввиду, прописать тег <Realm... /> внутри тега <Context... >... </Context>
PM MAIL   Вверх
garbuz
Дата 19.1.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(ivg @  19.1.2009,  16:29 Найти цитируемый пост)
Да, и плюс, я имелл ввиду, прописать тег <Realm... /> внутри тега <Context... >... </Context> 

Эээ, вот тут что-то я не догнал.
Поместить описание realm в context.xml?
А что туда писать? То же что и в server.xml?
Так?

Код

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ClientApp">


    <Resource
      name="jdbc/zeDS"
      type="javax.sql.DataSource"
      username="root"
      password=""
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      validationQuery="SELECT 1"
      url="jdbc:mysql://127.0.0.1:3306/testdb"
      maxActive="4">
   </Resource>

    <Realm className="org.apache.catalina.realm.DataSourceRealm"
        debug="99"
        localDataSource="true"
        dataSourceName="jdbc/zeDS"
        userTable="users" userNameCol="username" userCredCol="user_pass"
        userRoleTable="user_roles" roleNameCol="role_name"/>
    
</Context>


Добавлено через 14 минут и 14 секунд
Все получилось. 
ivg, ты опять выручил! Спасибо огромное  smile 
PM MAIL   Вверх
ivg
Дата 19.1.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(garbuz @  19.1.2009,  19:03 Найти цитируемый пост)
Так?

Попробовали? Работает? Из server.xml, конечно, описание realm надо убрать.
PM MAIL   Вверх
garbuz
Дата 19.1.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(ivg @  19.1.2009,  17:18 Найти цитируемый пост)
Попробовали? Работает? Из server.xml, конечно, описание realm надо убрать. 

Да, все работает, сперва из server.xml ничего не убирал, но тоже работало все, теперь убрал, тоже работает smile Видимо у context.xml приоритет выше )
PM MAIL   Вверх
garbuz
Дата 19.1.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



У меня еще вопрос, но он скорее уже относится к sql.
В доках к томкату написан такой пример создания таблиц пользователей и ролей
Код
    
create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
);



Код

<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99"
   dataSourceName="jdbc/authority"
   userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name"/>



Хочу изобразить что-то типа такого
Код

CREATE TABLE `user_roles` (
  `role_id` int(10) NOT NULL auto_increment,
  `role_name` varchar(50) NOT NULL,
  PRIMARY KEY  (`role_id`)
);

CREATE TABLE `users` (
  `user_id` int(10) NOT NULL auto_increment,
  `user_name` varchar(50) NOT NULL,
  `user_pass` varchar(50) NOT NULL,
  `user_role` int(10) NOT NULL,
  foreign key (`user_role`) references user_roles(`role_id`) 
  PRIMARY KEY  (`user_id`)
);


Указывая в context.xml следующее
Код

<Realm className="org.apache.catalina.realm.DataSourceRealm"
        debug="99"
        localDataSource="true"
        dataSourceName="jdbc/zeDS"
        userTable="users" userNameCol="user_name" userCredCol="user_pass"
        userRoleTable="users" roleNameCol="user_role"/>


и при по пытке пройти авторизацию, получаем access denied, можно как-нибудь так сделать?
Если в качестве вторичного ключа указать не id роли, а ее имя, тогда все работает, но мне кажется, что это тоже как-то не правильно... smile 
PM MAIL   Вверх
ivg
Дата 19.1.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



MySQL?
Код

CREATE TABLE `roles` (
  `role_id` int(10) NOT NULL auto_increment,
  `role_name` varchar(50) NOT NULL,
  PRIMARY KEY  (`role_id`),
  UNIQUE KEY (`role_name`)
)TYPE=InnoDB;
CREATE TABLE `users` (
  `user_id` int(10) NOT NULL auto_increment,
  `user_name` varchar(50) NOT NULL,
  `user_pass` varchar(50) NOT NULL,
  PRIMARY KEY  (`user_id`),
  UNIQUE KEY (`user_name`)
)TYPE=InnoDB;

CREATE TABLE `users_roles` (
  `user_id` int(10) NOT NULL,
  `role_id` int(10) NOT NULL,
  foreign key (`role_id`) references roles(`role_id`)
    on delete cascade on update cascade,
  foreign key (`user_id`) references users(`user_id`)
    on delete cascade on update cascade
)TYPE=InnoDB;

CREATE VIEW `roles_view` AS
select `users`.`user_name`,
       `roles`.`role_name`
  from `users`, `roles`, `users_roles`
 where `users_roles`.`role_id` = `roles`.`role_id`
   and `users_roles`.`user_id` = `users`.`user_id`;

У user'а может быть несколько ролей.
Код

<Realm className="org.apache.catalina.realm.DataSourceRealm"
        debug="99"
        localDataSource="true"
        dataSourceName="jdbc/zeDS"
        userTable="users" userNameCol="user_name" userCredCol="user_pass"
        userRoleTable="roles_view" roleNameCol="role_name"/>


Это сообщение отредактировал(а) ivg - 20.1.2009, 11:31
PM MAIL   Вверх
garbuz
Дата 19.1.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Спасибо, завтра попробую! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1350 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.