반응형

Spring Security는 기본적으로 UserDetailService를 구현한 인터페이스들을 이용해서 인증처리를 한다.


Default Jdbc인증 같은 경우 JdbcDaoImpl이라는 클래스가 인증의 역할을 담당하게 되는데,

Security를 통해 인증 후 principal이라는 객체에 인증 정보가 들어가는데, 이것도 사전에 정해진 객체인 org.springframework.security.core.userdetails.User라는 클래스에 맞게 들어가게 된다.


하지만, 서비스를 하다보면 저 객체에 포함되지 않는 정보들도 UI에 표시를 해줘야 하는 경우가 분명히 있다.


이런 경우 User클래스와 UserDetailService를 상속받아서 customizing을 하게 된다.


User클래스는 간단히 extends만 해서 새롭게 객체만 만들어주면 되고,

UserDetailService의 경우도 implements로 구현해야하는 메소드만 구현을 해주면 되는데,

보통은 그냥 이렇게 구현만 하면, Spring이 알아서 wrapping을 해주는게 정상인데, Spring Boot + Security의 경우 명시적으로 세팅을 해주어야 하는 부분이 있어서 공유함.


xml설정은 예전에 때려치웠기 때문에, java config기준으로 설명을 한다.


Security 설정을 위해서는 WebSecurityConfigurerAdapter라는 놈을 상속받아서 설정 파일을 만들고,

configureGlobal이라는 메소드를 bean으로 만들어주어야 한다. 


해당 메소드에 보면 AuthenticationManagerBuilder라는 객체가 Argument로 들어있는데, 이 값을 이용해서 아까 wrapping을 위해 만든

UserDetailService를 wrapping해줄 수가 있다.


주의할점 하나. User클래스 상속받아서 새거 만들 때, 추가되는 property들에 대해서 Getter, Setter를 만들어 주어야 함.


굳이 전체 소스 공개는 안하겠고, config 설정만 공개함.


//SecurityConfig.java
@Autowired
private UserDetailsService userDetailService;
 
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
 auth.userDetailsService(userDetailService);
}



UserDetailsService가 아무리해도 wrapping이 안되는 것 같길래... 이틀정도 삽질하다보니, config에 있었던 것임. 


반응형
,