DevEnjoy

One Step Closer

Day: 2018년 4월 25일

Spring Security 동일 session 제어

2018년 4월 25일 by YongPwi Leave a Comment

spring security를 사용하여 로그인 관리를 할때 동일 session에 대한 제어 처리 부분 삽질,,,

동일 session을 허락하지 않게 설정을하는데 설정은 잘 먹는다.

하지만 설정 이후에 logout을 해도 session이 삭제되지 않는다.

머지,,, 찾아보니 spring security 3.2.4 버전에서 문제가 있었다고 한다.

나도 하도 짜증나서 디버깅으로 찍어보니 AbstractAuthenticationProcessingFilter의 doFilter(ServletRequest req, ServletResponse res, FilterChain chain) method 실행중 sessionStrategy.onAuthentication(authResult, request, response); 부분에서 에러가 발생하였다.

해당 method는 CompositeSessionAuthenticationStrategy의 onAuthentication method에서 session 체크시 로그아웃한 session이 삭제되지 않아서 발생한 문제이다.

1
2
3
4
5
6
7
8
9
10
public void onAuthentication(Authentication authentication,
            HttpServletRequest request, HttpServletResponse response)
                    throws SessionAuthenticationException {
        for (SessionAuthenticationStrategy delegate : this.delegateStrategies) {
            if (this.logger.isDebugEnabled()) {
                this.logger.debug("Delegating to " + delegate);
            }
            delegate.onAuthentication(authentication, request, response);
        }
    }

왜 이런 문제가 발생하나 엄청나게 구글링을 했지만 딱히 방법이 없었다.

국내 블로거분께서는 spring security 3.2.7 이상을 사용시 해결되었다고 했는데 우리 환경은 4버전 이상이여서 해당 문제는 아닌것 같았다.

물론 방법은 찾았다.

spring boot에서 HttpSessionListener 관련 설정 내용에 대한 언급이 없어서 해외 개발자가 이슈로 등록했는데 받아들여지지 않은것 같다.

1
2
3
4
5
6
7
8
9
10
11
12
// web.xml에 하위 리스너를 선언하고 사용하는 방식
<listener>
    <listener-class>session.destory.servlet.SessionManagerListener</listener-class>
</listener>

// spring boot에서 bean annotation으로 선언하고 사용하는 방식
// 해당 bean 내용을 spring WebSecurityConfigurerAdapter를 extends한 class(WebSecurityConfiguration)
에 등록하고 사용하였다.
@Bean
public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
    return new ServletListenerRegistrationBean<HttpSessionEventPublisher>(new HttpSessionEventPublisher());
}

상위 처럼 설정하면 logout시 spring security 내부적으로 session을 삭제처리 된다.

참고링크

https://github.com/spring-projects/spring-boot/issues/2518

http://zgundam.tistory.com/62

Posted in: Java, Programing, Spring Tagged: Spring, Spring boot, Spring Security

Calendar

4월 2018
일 월 화 수 목 금 토
« 3월   1월 »
1234567
891011121314
15161718192021
22232425262728
2930  

Recent Posts

  • ubuntu bastion 설정
  • Spring Boot properties 암호화
  • Git Repository Bitbucket과 Issue Tracker Redmine 연동 설정
  • Spring Security 동일 session 제어
  • Spring @Mock, @Mockbean, @InjectMock

Recent Comments

  • pzotov (Ubuntu 14.04에서 Sonarqube 6.7.1 service 등록)
  • cours de theatre paris (AWS ELB와 Auto Scaling 연동, nginx)
  • bayern munich (IntelliJ EAP Font rendering)
  • camiseta del chelsea (OS X에서 APP 아이콘 변경)
  • cheap football shirts replica (jQuery Ajax에서 json Array 직렬화)

Copyright © [the-year] [site-link].

Powered by [wp-link] and [theme-link].