둘러보기 생략.
 

Anyframe 내의 Spring Security 관련 문의

저희가 Anyframe 내의 Spring Security을 사용하고자 하는 이유는
사용자 인증을 통해 애플리케이션 어디에서도 해당 사용자 정보를 얻고자 함입니다.

즉, user id를 java소스 파일에 파라미터로 넘기지 않고,
Session or Context등에서 사용자 정보를 가져올 수 있는 기능을 구현하고자 합니다.
(현재 jsp파일에서는 http session에 사용자 정보를 담아 사용하고 있습니다.)

예) ------------------------------------------------------------------------------------------

Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (obj instanceof UserDetails) {
String username = ((UserDetails)obj).getUsername();
} else {
String username = obj.toString();
}
---------------------------------------------------------------------------------------------

1) 위의 질문처럼 현재 로그인 사용자 정보를 파라미터로 넘기지 않고 가져올 수 있는 방법이 있나요?
2) 가능하다면, Anyframe내에서의 Spring Secuity에 대한 처리 config 내용 및 방법에 대해 가이드 부탁드립니다.

Spring Security의 UserDetails(사용자정보)를 얻을 수 있습니다.

안녕하세요? sh95choi 님.
예로 보여주신 것과 같이 UserDetails 정보를 얻을 수 있습니다.

Spring Security 에서는 어플리케이션의 여러 레이어에서 접근 가능한(파라메터 전달방식이 아님) 보안 객체 저장 메커니즘을 가지고 있으며 개발자는 SecurityContextHolder 의 api 를 사용하여 사용자 정보를 얻을 수 있습니다.

단 UserDetails 를 구현하고 있는 Spring Security의 User 객체에는 username, password, authorities, enabled 외 기타 flag 성 boolean 필드 몇개 만을 가지고 있습니다.

혹시 원하시는 사용자 정보가 보안/인증과 관련된 위 필드뿐만이 아닌 주소, 직급, 소속 등 일반 사용자 정보를 말씀하시는 것이라면 이 부분은 Spring Security 의 UserDetails 와 이에 대한 처리를 포함하는 JdbcUserDetailsManager 등을 확장하셔야 하는 부분입니다.

현재는 Spring Security 와 동일하게
((UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername()
와 같이 사용자정보(여기서는 username = 아이디)를 얻어낼 수 있겠습니다.
혹시 로그인 전이라면 Exception이 발생할 수 있으므로 위의 코드를 단계적으로 풀어 null 체크 등을 고려한
static util 메서드로 처리하셔도 됩니다.

Anyframe에 포함된 Spring Security 확장 영역은 공식적으로 오픈되지 않았고 사용자 정보 관련 부분은 사이트 특성에 따라 커스터마이징 요구가 제일 많은 영역으로 추후 확장성을 고려하여 검토하고 있습니다. 이에 대해서는 상반기 중 Security 확장 기능을 정제/문서화하여 가이드할 수 있도록 하겠습니다.