본문 바로가기

Backend Development

(40)
[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..
[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..
[Spring boot] @ConfigurationProperties 사용하기 @ConfigurationProperties 는 Spring Boot 에서 application.properties 파일에 정의된 프로퍼티들을 POJO 에 매핑하여 Bean 으로 만들수 있게 해주는 어노테이션이다. 아래의 application.properties에 정의된 값들을 Pojo제 받기 위해 ConfugurationProperties를 작성한다. application-dev.properties app.auth.tokenSecret=04ca023b39512e46d0c2cf4b48d5aac61d34302994c87ed4eff225dcf3b0a218739f3897051a057f9b846a69ea2927a587044164b7bae5e1306219d50b588cb1 app.auth.tokenExpirati..
[Spring boot] JSP embedded tomcat (tomcat-embedded-jasper) 동작 원리 JSP를 실행하면 실제로는 JSP로부터 생성된 서블릿이 실행된다. ① 클라이언트가 JSP를 실행을 요청하면 서블릿 컨테이너는 JSP 파일에 대응하는 자바 서블릿을 찾아서 실행한다. ② 대응하는 서블릿이 없거나 JSP 파일이 변경됐으면 JSP 엔진을 통해 서블릿 자바 소스를 생성한다. ③ 자바 컴파일러가 서블릿 자바 소스를 클래스 파일로 컴파일한다. (JSP 파일이 변경될때마다 반복) ④ JSP로부터 생성된 서블릿은 서블릿 구동 방식에 의해 service() 메소드가 호출되고 서블릿이 생성한 HTML 화면을 웹 브라우저로 보낸다. Spring boot에서 embedded tomcat으로 jsp 구동시 compiled 된 jsp 파일 위치 Spring boot로 윈도우즈에서 embedded tomcat으로 ..
[Spring boot] Spring Security Authentication 개념 AuthenticationEntryPoint @Override protected void configure(HttpSecurity http) throws Exception { http .cors() .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .csrf() .disable() .formLogin() .disable() .httpBasic() .disable() .exceptionHandling() .authenticationEntryPoint(new RestAuthenticationEntryPoint()) .and() package com.example.springsocial.securi..
[Spring boot] AOP (관점 지향 프로그래밍) 이해 및 활용 스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때..