복붙노트

[SPRING] ApplicationListener 메서드에서 세션 객체를 가져 오는 방법

SPRING

ApplicationListener 메서드에서 세션 객체를 가져 오는 방법

나는 성공적인 사용자 인증 후 HttpSession에 객체를 추가하려고합니다. 이 응용 프로그램에서 어떤 이유로 응용 프로그램이 원래 요청을하고 있기 때문에 SavedRequestAwareAuthenticationSuccessHandler를 사용하여 솔루션을 제안하지 마십시오.

public class AuthenticationSuccessListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent e) {
        //adding object to HttpSession
    }
} 

해결법

  1. ==============================

    1.내가 아는 한, ApplicationListener 인스턴스는 ApplicationContext 내의 bean입니다. 따라서 다른 빈이나 리소스를 주입 할 수 있어야합니다.

    내가 아는 한, ApplicationListener 인스턴스는 ApplicationContext 내의 bean입니다. 따라서 다른 빈이나 리소스를 주입 할 수 있어야합니다.

    그래서 현재의 HttpSession 인스턴스에 대한 참조를 얻으려면 :

    public class AuthenticationSuccessListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
    
    @Autowired
    private HttpSession httpSession;
    
            @Override
            public void onApplicationEvent(InteractiveAuthenticationSuccessEvent e) {
                   //adding object to HttpSession
            }
    }
    

    Spring은 범위가 지정된 프록시 메커니즘을 사용하여 HttpSession을 주입하여 HTTPSession을 현재 실행 스레드와 관련되게합니다.

    또한 Spring이 현재 HTTPSession을 주입 할 수 있도록 web.xml에 RequestContextListener를 등록해야합니다.

    <listener>  
       <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
    </listener>
    
  2. from https://stackoverflow.com/questions/19794115/how-i-can-get-session-object-from-applicationlistener-method by cc-by-sa and MIT license