Аутентификация Spring Security с использованием MyBatis - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь выполнить аутентификацию Spring Security с помощью MyBatis.

Мой файл безопасности весны выглядит следующим образом

        <global-method-security pre-post-annotations="enabled" />

       <beans:bean id="myUserService"                    
                 class="com.service.CustomService" />

            <authentication-manager>
                <authentication-provider user-service-ref="myUserService" />
            </authentication-manager>

Мой класс CustomService implements UserDetailsService, а в методе loadUserByUsername я использую MyBatis Dao для загрузки пользователей из БД.

@Autowired
private MyBatisDao dao;

В моем классе Controller я использую ту же аннотацию, и в этом случае она возвращает соответствующий объект.

Но когда я использую то же самое в классе CustomService, он возвращает null.

Я не могу понять причину этого. Я что-то пропустил. Пожалуйста, помогите

Любой пример Spring Authentication с использованием MyBatis мог бы помочь, я могу понять это, а затем, возможно, выяснить проблему

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Я исправляю эту проблему другим - не рекомендуемым способом.

В этом случае @controller может правильно работать с БД, поэтому я выполняю базовую аутентификацию в контроллере и отправляю этот результат в пользовательский сервис Таможенная служба не имеет действительной функции авторизации в этом случае. Если имя пользователя и пароль действительны, вызывается пользовательская служба, и это просто возвращает фиктивный результат аутентификации. Если имя пользователя и пароль неверны, я просто не вызывал аутентификацию в контроллере.

Хотя это не совсем верный путь, он отлично работает с некоторым специальным подходом к роли пользователя. Я хочу знать, что есть лучший способ решить эту проблему, но у меня нет времени, чтобы найти прямо сейчас.

0 голосов
/ 17 ноября 2011

Проблема решена путем использования альтернативного подхода при создании объекта MyBatis.

Я создал одноэлементный класс, который возвращает объект SqlSessionFactory, и использовал его в своем коде для вызова методов интерфейсов Mapper.

Пример кода ниже

InputStream myBatisConfigStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.xml"); 

    if (null == sqlSessionFactory){

        sqlSessionFactory = new SqlSessionFactoryBuilder().build(myBatisConfigStream);
        sqlSessionFactory.getConfiguration().addMapper(IOMapper.class);
    }

    try {

        myBatisConfigStream.close();
    } catch (IOException e) {

        e.printStackTrace();
    }

    public static SqlSessionFactory getSqlSessionFactory() {

    return sqlSessionFactory;
}

Файл config.xml содержит только источник данных.

Надеюсь, это поможет.

...