Spring Security 3.0 не может получить / обработать учетные данные пользователя - PullRequest
1 голос
/ 28 ноября 2011

Пожалуйста, помогите мне в приведенном ниже сценарии ....

ApplicationContext-security.xml

<authentication-manager>
  <authentication-provider>
     <jdbc-user-service data-source-ref="dataSource"
         users-by-username-query="SELECT username, password FROM myLibrary.user WHERE username=?" />
  </authentication-provider>
</authentication-manager>

базы данных конец (MySQL)

CREATE TABLE `myLibrary`.`user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
    `enabled` bit(1) DEFAULT NULL,
  `fullName` varchar(255) DEFAULT NULL,
  `password` varchar(120) DEFAULT NULL,
  `username` varchar(40) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `username` (`username`)
);

XML-пользователь

<user-service>
    <user name="admin" password="amdin" authorities="supervisor, user" />
    <user name="counter1" password="counter1" authorities="user" /> 
</user-service>

"DataSource"; ценности как идеальные тоже ... !!! И нет никаких исключений в любых журналах .... что означает, что интеграция библиотеки идеальна. На самом деле, при использовании пользовательских определений на основе XML, он отлично работает .... но при доступе к базе данных это не так.

Моя страница входа остается прежней; Я имею в виду, логин не удается. Пожалуйста, помогите друзьям .... !!!!

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Вам нужно немного изменить запрос, потому что JdbcDaoImpl ожидают 3 параметра:

  • имя пользователя
  • пароль
  • включено

, поэтому вам нужно добавить true в качестве последнего параметра:

<jdbc-user-service data-source-ref="dataSource"
    users-by-username-query="SELECT username, password, true
       FROM myLibrary.user WHERE username=?" />

К сожалению, это не очень хорошо документировано в API, но вы должны взглянуть на исходный код из org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl


Btw: Если вы используете полномочия, то вы также должны указать authorities-by-username-query (за исключением того, что вам нужно по умолчанию)

<jdbc-user-service
   data-source-ref="dataSource"
   users-by-username-query="SELECT username, password, true FROM myLibrary.user WHERE username=?"
   authorities-by-username-query="SELECT username,authority from users WHERE username=?"
 />

Конечно, это пример, и запрос, скорее всего, не будет работать для ваших таблиц!

0 голосов
/ 15 декабря 2011

Извините за задержку .... !!!таким образом, проблема в таблице, ответственной за пользователей, и должна быть users.И это работает потрясающе ..... !!!спасибо друзья ..... большое спасибо ... !!!!

<authentication-manager>   <authentication-provider>      <jdbc-user-service data-source-ref="dataSource"/>   </authentication-provider> </authentication-manager>

До того, как выше xml-строк;убедитесь, что таблица для пользователей должна быть users, а также должна существовать другая таблица authorities с внешним ключом users - username.Хорошо, позвольте мне поставить часть базы данных тоже! !!

CREATE TABLE `myLibrary`.`users` (     `id` int(11) NOT NULL AUTO_INCREMENT,       `enabled` bit(1) DEFAULT NULL,     `fullName` varchar(255) DEFAULT NULL,     `password` varchar(120) DEFAULT NULL,     `username` varchar(40) NOT NULL,     PRIMARY KEY (`id`),     UNIQUE KEY `id` (`id`),     UNIQUE KEY `username` (`username`)   );

CREATE TABLE `myLibrary`.`authorities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `authority` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `allowed` bit(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `fk_username` (`username`),
  CONSTRAINT `fk_username` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ;

Обратите внимание, что;authorities(allowed) не является обязательным .... это часть моего кода ... как я хочу показать пользователю .... все его полномочия независимо от разрешения на использование.

Я использую hibernate и поэтому я получаю ID поле ... и, конечно, это зависит от вас, насколько это удобно для использования.

Хорошего дня... !!!!

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...