우리 회사는 Spring MVC를 평가하여 다음 프로젝트 중 하나에서 사용해야하는지 결정했습니다. 지금까지 내가 본 것을 좋아하고 지금 당장 Spring Security 모듈을 살펴보고 사용할 수 있는지 여부를 결정하고 있습니다.
보안 요구 사항은 매우 기본적입니다. 사용자는 사이트의 특정 부분에 액세스 할 수 있도록 사용자 이름과 비밀번호를 제공하면됩니다 (예 : 계정 정보를 얻는 등). 익명의 사용자에게 액세스 권한을 부여해야하는 사이트 (FAQ, 지원 등)가 있습니다.
내가 만든 프로토 타입에서 인증 된 사용자를 위해 "LoginCredentials"개체 (사용자 이름과 암호 만 포함)를 세션에 저장했습니다. 예를 들어, 일부 컨트롤러는 로그인 한 사용자 이름에 대한 참조를 얻기 위해이 개체가 세션에 있는지 확인합니다. 대신이 자체 제작 논리를 Spring Security로 바꾸려고합니다. "로그인 한 사용자를 어떻게 추적합니까?"를 제거하면 큰 이점이 있습니다. "사용자를 어떻게 인증합니까?" 내 컨트롤러 / 비즈니스 코드에서.
Spring Security는 (스레드 당) "컨텍스트"객체를 제공하여 앱의 어느 곳에서나 사용자 이름 / 주요 정보에 액세스 할 수있는 것처럼 보입니다 ...
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
...이 객체는 어떤 방식으로 (전역) 싱글 톤이므로 매우 봄이 아닌 것처럼 보입니다.
내 질문은 이것입니다 : 이것이 Spring Security에서 인증 된 사용자에 대한 정보에 액세스하는 표준 방법이라면, 단위 테스트가 필요할 때 단위 테스트에 사용할 수 있도록 AuthenticationContext를 SecurityContext에 주입하는 허용되는 방법은 무엇입니까? 인증 된 사용자?
각 테스트 케이스의 초기화 방법에 이것을 연결해야합니까?
protected void setUp() throws Exception {
...
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword()));
...
}
지나치게 장황한 것 같습니다. 더 쉬운 방법이 있습니까?
SecurityContextHolder
객체 자체는 매우 취소 봄 같은 것 ...