2011-08-25 5 views
0

봄과 겨울잠에 익숙하지 않습니다. 세션으로 scope를 넣으려면 POJO 클래스를 사용했습니다. 여기 사용자 로그인을위한 Spring 세션 범위 사용

@Component 
@Scope("session") 
public class SessionInfo { 
    private int userId; 
    private String loggingUser; 

// getter and setter methods 

} 

이어서 내 컨트롤러 클래스 i는 클래스 sessionInfo을 통과 할 수있는 영역 제어기 = "요청"및 방법으로 설정할 세션 데이터를 얻을/설정.

@RequestMapping(method = RequestMethod.GET) 
    public String index(Model model,SessionInfo session) { 
     session.setLoggingUser("[email protected]"); 
     // set model attributes .... 
     return "BusinessCategory/index"; 
    } 

어떻게 내 응용 프로그램에서 세션 데이터를 유지하고 있습니까? 이런 식으로 내가 필요한 모든 메소드에서 sessionInfo 클래스를 전달할 필요가있을 때마다 세션 객체에 사용자가 있는지 검사 할 때마다 그것이 올바른지 아닌지입니다. 또한 우리는 이것을 위해 인터셉터를 사용하지 않습니다. 그렇지 않은 경우 봄에 세션 데이터를 유지하는 가장 좋은 방법은 무엇입니까?

+0

응용 프로그램에 대한 로그인을 관리하기 위해 Spring Security를 ​​사용하고 있습니까? 그렇다면 이미 세션에서 사용자에게 도달하기위한 추상화가 있습니다. –

+0

Thax Ryan, 로그인 용으로 봄 보안을 사용했습니다. 어떻게 로그인 사용자의 세션 세부 사항을 저장할 수 있습니다 – Amila

답변

3

스프링 보안에는 SecurityContextHolder이라는 클래스도 포함됩니다. 이 클래스는 현재 요청에 대한 로그인 컨텍스트에 액세스 할 수있는 스레드 안전 "싱글 톤"입니다. 특히 SecurityContextHolder.getContext().getAuthentication().getPrincipal()을 호출하여 인증 사용자에 액세스 할 수 있습니다.

LdapAuthenticationProvider을 인증 공급자로 사용하는 경우 getPrincipal()을 호출하여 반환 된 기본 인스턴스는 LdapUserDetailsImpl이됩니다. 맞춤 UserDetailsContextMapper을 구현하고 LdapAuthenticationProvider 인스턴스의 userDetailsContextMapper 속성에 삽입하여 맞춤 설정할 수 있습니다. 에서

+0

Thax Ryan, 나는 당신의 아이디어를 검토하고 봄 보안 사용자 login.that 나를 위해 완벽하게 잘 했어. – Amila

+0

스프링 보안 파일에 사용자 인증 쿼리를 추가합니다. 하지만 이제는 사용자 테이블에서 로그인 한 사용자 ID를 가져와야합니다. – Amila

+0

@Amila : 찾고 있던 답변을 수락하십시오. 이것은 질문을 "해결 된"것으로 표시하는 데 도움이되어 커뮤니티에 도움이 될 수 있습니다. –

관련 문제