본문 바로가기

전체 글

(134)
[Spring boot] Spring Security 분석 - FilterSecurityInterceptor (Session 인증 기반) 서버 기동 시 embedded tomcat container 기본 설정 org/apache/tomcat/embed/tomcat-embed-core/9.0.54/tomcat-embed-core-9.0.54-sources.jar!/org/apache/catalina/session/ManagerBase.java:388 @Override public void setContext(Context context) { if (this.context == context) { // NO-OP return; } if (!getState().equals(LifecycleState.NEW)) { throw new IllegalStateException(sm.getString("managerBase.setContextNotNew..
[Spring boot] Spring Security 분석 - WebSecurityConfigurerAdapter
[Spring boot] Spring Security 분석 - FilterSecurityInterceptor (Token 인증 기반) 특정 페이지에 권한없는 계정으로 접근 시 아래와 같이 Exception 처리가 된다. handleAccessDeniedException:185, ExceptionTranslationFilter (org.springframework.security.web.access) handleSpringSecurityException:173, ExceptionTranslationFilter (org.springframework.security.web.access) doFilter:142, ExceptionTranslationFilter (org.springframework.security.web.access) doFilter:115, ExceptionTranslationFilter (org.springframework..
[Spring boot] Spring Security 분석 - Authentication 에러 처리 token이 만료되어 Access denied exception이 떳을때 org/springframework/security/access/intercept/AbstractSecurityInterceptor.java:178 attemptAuthorization(object, attributes, authenticated) 를 부를기 전에 SecurityContextHolder.getContext().getAuthentication()를 가져온다. => 따라서 filter에서 SecurityContextHolder.getContext().setAuthentication 를 안해주면 access denied 에러가 발생하게 된다. org/springframework/security/access/intercep..
[Spring boot] Spring Security 분석 - Start 시퀀스 부팅시 beanFactory에 의해 수집된 bean 들을 tomcat start시 등록함. 여기에는 filter class들도 포함됨. 더보기 :62, FilterRegistrationBean (org.springframework.boot.web.servlet) createRegistrationBean:294, ServletContextInitializerBeans$FilterRegistrationBeanAdapter (org.springframework.boot.web.servlet) createRegistrationBean:290, ServletContextInitializerBeans$FilterRegistrationBeanAdapter (org.springframework.boot.web.serv..
[Java] 제네릭(Generic) 분석 T extends 클래스 상속을 이용해서 T의 자료형을 제한함 클래스 선언시 사용하며 인스턴스 생성시 특정 클래스를 상속받은 클래스형만 인스턴스 내부에서 사용할 수 있도록 함 특정 인터페이스를 구현한 클래스만 사용하려는 경우에도 사용 가능 public interface Behavior { void displayName(); } public class Car implements Behavior{ @Override public void displayName() { System.out.println("This is a car."); } } public class Bus implements Behavior{ @Override public void displayName() { System.out.println("..
[Spring boot] Spring Security 분석 - 메소드 Security 설정은 아래와 같이 SecurityConfig 클래스에 어노테이션을 붙여준다. prePostEnabled의 속성은 Spring Security @PreAuthorize, @PostAuthorize 사용 가능 securedEnabled 경우 @Secured 사용 가능 jsr250Enabled의 경우 @RoleAllowed 어노테이션 사용 가능 @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity( securedEnabled = true, jsr250Enabled = true, prePostEnabled = true ) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowi..
[Spring boot] refresh token 갱신 시 DB 저장값과 Cookie 값 안맞을 경우 Interceptor에서 preHandle로 request를 잡아서 refresh token을 재 생성하여 response의 cookie를 변경할경우 cookie write 완료 전에 들어온 request들은 새로 변한 값이 아닌 이전 값으로 올때가 있다. 즉 http request가 동시에 여러개가 올 경우에는 reponse 변경값이 적용되기 전에 요청이 올수가 있다. 이럴 경우에는 refresh token 변조 확인을 위해 DB의 token 값을 읽을 때 생성된지 얼마 안된 토큰은 skip하고 일정 threshold (예: 2초) 지난후 token부터 진위여부를 체크한다. public ApiResponse refreshToken(HttpServletRequest request, HttpServletR..