2014-01-06 2 views
0

이 문제를 해결하는 데 어려움이 있습니다.스프링 보안 데이터베이스 인증 캐스팅 스프링 사용자 - 도메인 사용자

사용자가 조직화되어있는 다중 점유 시스템이 있습니다. 해당 조직 내에서 사용자 이름은 고유해야합니다. 그렇지 않으면 두 조직이 동일한 사용자 이름을 가질 수 있습니다.

jdbc-user-service와 관련된 스프링 보안이 제대로 작동합니다. 내 문제는 현재 사용자를 얻으려고 할 때 시작됩니다.

스프링 3과 Principal 객체를 메서드 매개 변수로 사용하는 a link을 살펴 보았습니다. 교장이 충분한 정보를 갖고 있지 않다는 것을 제외하면 이것은 훌륭하게 작동합니다! 첫째, 내 유스 케이스에서는 사용자 이름이 고유하지 않으며 사용자가 속한 조직에 쉽게 액세스 할 수 있습니다.

조금 더 자세히 검색합니다 this 멋진 답변입니다. 이 문제는 이전과 같은 문제입니다. 단지 충분한 정보가없는 Principal 객체에 의존합니다.

@Override 
public Object resolveArgument(MethodParameter methodParameter, 
        ModelAndViewContainer mavContainer, 
        NativeWebRequest webRequest, 
        WebDataBinderFactory binderFactory) throws Exception { 

     if (this.supportsParameter(methodParameter)) { 
      Principal principal = webRequest.getUserPrincipal(); 
      return (User) ((Authentication) principal).getPrincipal(); 
     } else { 
      return WebArgumentResolver.UNRESOLVED; 
     } 
} 

내 자신을 사용할 수있는 사용자 개체를 대체 할 수있는 좋은 방법이 있나요 (여기에 마술이다)? 사용자 정의 UserDetailService 작성에 어려움이 있습니까? 이 길을 걷는 것보다 더 나은 접근법이 있습니까?

감사

답변

0

는 사용자 개체의 UserDetails에서 상속 확인 (또는 래퍼를 사용) 및 주요로 사용.

public class MyCustomUser implemnents UserDetails { 
    // .. 
} 

이제이 이름에 의해 참조보다 깨끗한 방법이 있나요 사용자

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

Object principal = auth.getPrincipal(); 

MyCustomUser user = (MyCustomUser)principal; 

user.myCustomMethod(); 
+0

추출 할 수있는 사용자 개체

@Service public class MyCustomUserDetailsServiceImpl implements UserDetailsService { @Autowired private MyCustomUserDAO userDAO; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return userDAO.getByUsername(username); } } 

을 반환 사용자 정의 UserDetailsService의 확인? 예를 들어 '사용자 이름'으로 게임을 할 수 있다는 것을 알고 있습니다. 조직에 문자열 고양이가 있거나 일종의 문자열로 사용자 ID를 변환하여 사용할 수 있지만 사용자 이름별로로드되지 않습니다. 메서드 이름) – tfecw

+0

예, 무시합니다. 조직 전체에 걸쳐 중복 된 사용자 이름을 갖는 것이 좋겠지 만 조직이 무엇인지 파악하여 사용자 이름과 결합 할 수있는 방법이 필요합니다. 나는 사용자 이름을 유일하게 지명 할 것이다. 답변 해주셔서 감사합니다! – tfecw

관련 문제