복붙노트

[SPRING] 스프링 보안에서 세션을 활성화하고 세션 시간 제한을 설정하는 방법

SPRING

스프링 보안에서 세션을 활성화하고 세션 시간 제한을 설정하는 방법

안녕하세요 저는 Spring Security에 익숙하지 않습니다. 로그인, 로그 아웃 및 세션 타임 아웃 기능에 대해 작업하고 있습니다. 이 문서를 참조하여 코드를 구성했습니다. 아래 코드를 참조하십시오.

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/admin/**")
            .access("hasRole('ROLE_USER')").and().formLogin()
            .loginPage("/login").failureUrl("/login?error")
                .usernameParameter("username")
                .passwordParameter("password")
                .and().logout().logoutSuccessUrl("/login?logout").and().csrf();
        http.sessionManagement().maximumSessions(1).expiredUrl("/login?expired");
    }

AbstractSecurityWebApplicationInitializer 클래스 재정의

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {

   @Override
   public boolean enableHttpSessionEventPublisher() {
     return true;
 }

}

그래도 내가 잘하고 있는지, 내가 세션 시간 제한을 설정해야 할 때 좋은 것처럼 보이는지 명확히해야합니다. 나는 주석에 기반하여이를 완전히 수행하고있다.

해결법

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

    1.JavaConfig를 사용하고 XML을 사용하지 않으려면 HttpSessionListener를 만들고 getSession (). setMaxInactiveInterval ()을 사용하고 Initializer에서 onStartup ()에 리스너를 추가합니다.

    JavaConfig를 사용하고 XML을 사용하지 않으려면 HttpSessionListener를 만들고 getSession (). setMaxInactiveInterval ()을 사용하고 Initializer에서 onStartup ()에 리스너를 추가합니다.

    public class SessionListener implements HttpSessionListener {
    
        @Override
        public void sessionCreated(HttpSessionEvent event) {
            System.out.println("session created");
            event.getSession().setMaxInactiveInterval(15);
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {
           System.out.println("session destroyed");
        }
    }
    

    그런 다음 초기화 프로그램에서 :

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.addListener(new SessionListener());
    }
    
  2. ==============================

    2.위의 문제는 web.xml에서만 아래 설정을 추가하여 해결할 수있었습니다. 더 좋은 방법이 받아 들여질 것입니다.

    위의 문제는 web.xml에서만 아래 설정을 추가하여 해결할 수있었습니다. 더 좋은 방법이 받아 들여질 것입니다.

     <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
    
  3. ==============================

    3.application.properties를 사용할 때 set 속성 server.session.timeout = value는 초 단위입니다.

    application.properties를 사용할 때 set 속성 server.session.timeout = value는 초 단위입니다.

  4. from https://stackoverflow.com/questions/36795678/how-to-enable-session-and-set-session-timeout-in-spring-security by cc-by-sa and MIT license