Как аутентифицировать пользователя программно с помощью репозитория данных Spring Spring?

1

Я создаю демонстрационный проект с аудитом пружинных данных.

У меня есть файл spring-security.xml:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd">

    <authentication-manager>            
        <authentication-provider ref="userDao" />
    </authentication-manager>

</beans:beans>

Это относится к весенним данным jpa repository userDao:

public interface UserDao extends CrudRepository<User, Long> {

    User findByUsernameAndPassword(String username, String password);
}

Я ожидаю, что данные весны jpa будут использовать этот метод для аутентификации пользователя.

Проблема 2 заключается в том, что мне необходимо аутентифицировать пользователя программно. Я попытался использовать UserDetailsManager но у него есть только метод loadByUsername когда мне нужно загрузить пользователя по имени пользователя и паролю.

Как аутентифицировать пользователя с UserDao.findByUsernameAndPassword метода UserDao.findByUsernameAndPassword?

User объект PS реализует интерфейс UserDetails.

Теги:
spring-security
spring-data-jpa

1 ответ

2
Лучший ответ

Я предполагаю, что вы используете базовую конфигурацию, взятую из начальной страницы Spring Security

Чтобы аутентифицировать программно пользователя, вам нужно будет поместить этого пользователя в контекст безопасности. В вашем конкретном случае это может выглядеть так:

User user = userDao.findByUsernameAndPassword("username", "password");
SecurityContext ctx = SecurityContextHolder.createEmptyContext();
SecurityContextHolder.setContext(ctx);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user.getName(), user.getPassword(), AuthorityUtils.createAuthorityList("ROLE_USER"));
authentication.setDetails(user);
ctx.setAuthentication(authentication);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню