반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- MariaDB
- jenkins
- jquery
- Maven
- spring3
- Java
- popup
- Tomcat
- centos7
- PM2
- Eclipse
- security
- FCM
- yona
- ajax
- pwa
- config
- mysql
- mybatis
- javascript
- Next.js
- nodejs
- NextJS
- node.js
- docker
- MSsql
- Push
- rocky9
- git
- SpringBoot
Archives
- Today
- Total
종이 한장 차이...
springboot+security session timeout config 본문
728x90
반응형
SMALL
WAS 서버의 timeout 설정 외에 war별? 애플리케이션에 별도 session timeout 설정이
필요한 경우...
1. 스프링 씨큐리티 설정 파일에 로그인 성공 시 후처리용 헨들러를 설정한다.
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
/**로그인성공 후처리용 헨들러
* @return
*/
private SuccessHandlerImpl successHandler() {
return new SuccessHandlerImpl();
}
...생략...
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
...생략...
.successHandler(successHandler())//필터로등록
...생략...
}
SMALL
반응형
728x90
2. 로그인성공 후처리용 헨들러
package com.graykang.test.config.security;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import com.graykang.test.common.model.CustomUserDetailsImpl;
/**
* @author graykang
*
*/
public class SuccessHandlerImpl implements AuthenticationSuccessHandler{
//시간 참조 설정.
public final Integer SESSION_TIMEOUT_IN_SECONDS = 60 * 300;//30m
@SuppressWarnings("unchecked")
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
CustomUserDetailsImpl cusd= (CustomUserDetailsImpl) authentication.getPrincipal();
Collection<GrantedAuthority> authlist = (Collection<GrantedAuthority>) cusd.getAuthorities();
Iterator<GrantedAuthority> authlist_it = authlist.iterator();
String url = request.getContextPath()+"/front/dashBoard";
while(authlist_it.hasNext()) {
GrantedAuthority authority = authlist_it.next();
System.out.println("SuccessHandler:"+authority.getAuthority());
if(authority.getAuthority().equals("ROLE_ADMIN")) {
request.getSession().setAttribute("msg", "ADMIN");
//세션에 MaxInactiveInterval 설정으로 세션타임아웃 설정.
request.getSession().setMaxInactiveInterval(SESSION_TIMEOUT_IN_SECONDS);
url = request.getContextPath()+"/admin/adminmain";
}else{
request.getSession().setMaxInactiveInterval(SESSION_TIMEOUT_IN_SECONDS);
request.setAttribute("msg", "USER");
}
}
response.sendRedirect(url);
}
}
음... 테스트 결과 security의 인증 과정을 거쳐야만 타임아웃이 먹히는 것 같다. 정상적인 로그인 이외에 별도로 강제로
세션을 생성해주는 경우 타임아웃이 먹히지 않는다. 해서 아래와 같이 HttpSessionListener를 사용하는 방법으로
처리를 하니 비정상(수동임의 세션) 세션생성을 했을 경우도 타임아웃이 잘 걸린다.
package com.graykang.test.config.security;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
class SessionListener implements HttpSessionListener {
//application.properties에 session.timeout=1800 으로 설정.
@Value("${session.timeout}")
private Integer sessionTimeout;
@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setMaxInactiveInterval(sessionTimeout);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {}
}
728x90
반응형
LIST
'Spring' 카테고리의 다른 글
browser type check by JAVA (0) | 2023.06.08 |
---|---|
Springboot2.x Web 프로젝트 설정 1(프로젝트 생성 및 JSP설정) (0) | 2023.05.08 |
spring tags + application.properties 값 참조 하기 (0) | 2022.04.28 |
springboot+swagger+config (0) | 2022.04.18 |
spring(springboot) simple POST request (API call) (2) | 2022.03.15 |
Comments