반응형
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 | 31 |
Tags
- mysql
- Java
- nodejs
- PM2
- config
- Maven
- spring
- spring3
- jenkins
- console
- ajax
- yona
- git
- MSsql
- node.js
- NextJS
- jquery
- Eclipse
- post
- centos7
- MariaDB
- popup
- Next.js
- JsonData
- War
- rocky9
- mybatis
- security
- SpringBoot
- javascript
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) (0) | 2022.03.15 |
Comments