[SPRING] JPA와 함께 Spring Security 사용
SPRINGJPA와 함께 Spring Security 사용
나는 봄에 새로운 사람이다.
우리는 봄 보안 기능을 사용하고 있습니다. 데이터베이스 연결 : JPA의 eclipselink 구현. 데이터베이스 : MySql
스프링 보안을 사용하는 동안 인증 제공자의 구성은 다음과 같습니다 -
<authentication-provider>
<jdbc-user-service id="userDetailsService" data-source-ref="Datasource" />
</authentication-provider>
그러나 JPA에서는 데이터 소스를 정의하지 않고 jpa.PersistenceProvider 공급자와 함께 Persistence 단위를 사용합니다.
그렇다면 데이터베이스 연결을 위해 JPA를 사용하도록 인증 공급자를 구성하는 방법은 무엇입니까?
인증을 위해 데이터베이스를 사용하기 위해 data-source-ref 필드가 정확히 포함해야하는 것은 무엇입니까?
미리 감사드립니다.
해결법
-
==============================
1.기본적으로 UserDetailsService를 직접 구현해야합니다.
기본적으로 UserDetailsService를 직접 구현해야합니다.
예를 들어 User 엔티티가 있고 UserDetailsService 구현은 사용자를 검색하여 UserDetails 객체로 변환합니다 (또는 엔티티가 UserDetails를 구현해야 함).
샘플 구현 :
public class MyUserDetailsService implements UserDetailsService{ private EntityManager entityManager; @PersistenceContext public void setEntityManager(EntityManager newEm){ this.entityManager = newEm; } public UserDetails loadUserByUsername(String username){ // assuming that you have a User class that implements UserDetails return entityManager.createQuery("from User where username = :username", User.class) .setParameter("username", username) .getSingleResult(); } }
그리고이를 사용자 spring-security.xml에 추가합니다.
<authentication-manager> <authentication-provider user-service-ref="MyUserDetailsService" /> </authentication-manager>
-
==============================
2.귀하의 경우 인증을위한 더 쉬운 방법은 서비스 계층 클래스 중 하나가 org.springframework.security.core.userdetails.UserDetailsService 인터페이스를 구현하도록하는 것입니다. 이 인터페이스는 하나의 메소드 UserDetails loadUserByUsername (String username) 만 포함합니다. 주어진 사용자 이름에 대해 UserDetails 인스턴스를 반환해야합니다.
귀하의 경우 인증을위한 더 쉬운 방법은 서비스 계층 클래스 중 하나가 org.springframework.security.core.userdetails.UserDetailsService 인터페이스를 구현하도록하는 것입니다. 이 인터페이스는 하나의 메소드 UserDetails loadUserByUsername (String username) 만 포함합니다. 주어진 사용자 이름에 대해 UserDetails 인스턴스를 반환해야합니다.
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { // load and return user using your regular JPA techniques here ... }
서비스 클래스에서이 메서드를 구현하면 스프링 구성 파일 참조를 추가하기 만하면됩니다.
<authentication-manager> <authentication-provider user-service-ref="myServiceLayerClassInstance"> </authentication-provider> </authentication-manager>
from https://stackoverflow.com/questions/4489703/use-spring-security-with-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 3으로 해싱 및 솔팅 암호 (0) | 2019.01.30 |
---|---|
[SPRING] 단일 빈에서 사용하기 위해 여러 파일에서 스프링 특성을 수집하는 방법 (0) | 2019.01.30 |
[SPRING] 스프링 보안 oauth2 및 양식 로그인 구성 (0) | 2019.01.30 |
[SPRING] 서블릿 매핑 url-pattern에서 이중 와일드 카드 (*)는 무엇을 의미합니까? (0) | 2019.01.30 |
[SPRING] Spring restful service에서 파일과 JSON 객체로 구성된 다중 요청을 처리하는 방법은 무엇입니까? (0) | 2019.01.30 |