본문 바로가기

Spring

(18)
Spring Security - AnonymousAuthenticationFilter란 - AnonymousAuthenticationFilter 란 - 스프링 시큐리티에서 AnonymousAuthenticationFilter는 익명 사용자의 요청에 대해 처리해주는 필터로 인증을 하지 않은 요청인 경우 인증 객체를 익명 권한이 들어가 있는 객체를 만들어 SecurityContextHolder에 넣어 주는 역할을 한다. 기본적으로 스프링 시큐리티 필터에 포함이 되어 있는 필터이며 만들어지는 객체는 아래와 같은 값을 가지고 있다. pricial : anonymousUser authorities : ROLE_ANONYMOUS // 기본 생성자 public AnonymousAuthenticationFilter(String key) { this(key, "anonymousUser", Authority..
Spring Security - RememberMeAuthenticationFilter 란 - RememberMeAuthenticationFilter 란 - 스프링 시큐리티에서는 RememberMe라는 기능을 지원해준다. 이 RememberMe라는 기능은 세션이 만료된 뒤에도 서버에서 클라이언트의 인증 값을 기억하고 있어 주는 기능이다. 보통 cookie에 Remember Me 기능을 해줄 수 있는 특정한 쿠키 키-값을 세팅해서 구현을 한다. 이 복잡한 과정을 시큐리티에서는 간단한 설정으로 제공을 해주며 해당 기능을 사용하기 위해서는 해당 기능을 아래와 같은 형태로 활성화시켜야 한다. @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin(); http.rememberMe(); } 위와 같이 ..
Spring Security - LogoutFilter 란 - LogoutFilter 란- LogoutFilter란 로그아웃에 대한 처리를 담당하는 필터로 사용자가 로그아웃 요청을 했을 경우에만 적용되는 필터이다. LogoutFilter는 세션 무효화, 인증 토큰 삭제, SecurityContext에서 해당 토큰 삭제, 쿠키 삭제 및 로그인 페이지로 리다이렉트를 시켜주는 기능이 있다. LogoutFilter의 필터 기능이 구현된 코드를 보면 아래와 같다. private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { if (this.requiresLogout(request, res..
Spring Security - UsernamePasswordAuthenticationFilter 란 - UsernamePasswordAuthenticationFilter 란- UsernamePasswordAuthenticationFilter란 Form based Authentication 방식으로 인증을 진행할 때 아이디, 패스워드 데이터를 파싱하여 인증 요청을 위임하는 필터이다. 쉽게 설명하자면 유저가 로그인 창에서 Login을 시도할 때 보내지는 요청에서 아이디(username)와 패스워드(password) 데이터를 가져온 후 인증을 위한 토큰을 생성 후 인증을 다른 쪽에 위임하는 역할을 하는 필터이다. Spring Boot 기반의 HttpSecurity를 설정하는 코드에서 http.formLogin(); 을 사용하면 시큐리티에서는 기본적으로 UsernamePasswordAuthenticationF..
@Transactional Rollback이 안되는 이유, @Transactional 사용시 주의 사항 - 삽질중인 개발자 개발을 하다 보니 예외(Exception)에 대해서 아무 생각 없이 사용하다가 심각한 버그를 발견하게 되어서 글을 정리한다. 아마 초보 개발자들이 가장 많이 하는 실수 중 하나 아닐까 싶다. 아래의 코드는 문자열을 넘겨주면 해당 문자열의 길이를 반환해주는 함수이다. public int getLength(String str) throws Exception{ if(str == null){ throw new Exception(); } return str.length(); } 그냥 봤을 때는 null일 때 유효성 검사도 되어 있고 유효성 검사에서 걸리면 Exception까지 던져주는 문제없어 보이는 코드처럼 보인다. 만약 위에 있는 함수를 사용해서 스프링에서 제공하는 @Transactional 어노테이션을 사용..
Spring Boot 이메일 인증 구현하기 - 삽질중인 개발자 - 회원가입 이메일 인증 구현하기 - 이메일 인증을 구현하는 방법에는 크게 2가지 방법이 있다. 첫 번째로 접속하면 이메일 인증이 되는 특정 URL 링크를 넘겨줘서 이메일 인증을 하는 방법이고 두 번째는 인증 코드를 이메일로 보내서 이메일 코드를 입력하게 해 인증하는 방법이다. 그중 해당 포스팅에서는 특정 URL 링크를 접속하여 이메일 인증이 되는 첫 번째 방식을 구현할 것이다. 인증 이메일을 보내는 방법으로는Gmail SMTP를 이용할 것이다. ( 네이버나 다른 서버도 설정만 바꾸면 바로 적용 가능하다. ) 우선 큰 흐름을 살펴보자 회원가입을 한 유저가 이메일 인증이 안된 회원인 경우 인증 메일을 보내기 -> 인증 메일 안에 있는 URL을 클릭 -> 해당 URL에 접속 시 유저의 이메일 인증 관련 DB..
Spring Security UserDetails, UserDetailsService 란? - 삽질중인 개발자 Spring Security - UserDetails , UserDetailsService UserDetails 란? Spring Security에서 사용자의 정보를 담는 인터페이스이다. Spring Security에서 사용자의 정보를 불러오기 위해서 구현해야 하는 인터페이스로 기본 오버라이드 메서드들은 아래와 같다. 메소드 리턴 타입 설명 기본값 getAuthorities() Collection
RestTemplate generic response type 매핑 방법 - 삽질중인 개발자 - RestTemplate Exchange 매소드 ResponseType 을 Generic Type 으로 매핑하기 - RestTemplate 을 사용하다 보면 Map 형태로 응답을 받아야 할 때가 있다. 이 포스팅에서는 resttemplate에서 map으로 응답받는 방법에 대해 포스팅한다. 우선 RestTemplate을 사용해서 API를 호출할 때 잘 만들어진 API라면 아래와 같은 형태를 갖고 있다. //네이버 API 호출 //https://developers.naver.com/docs/login/profile/ { "resultcode": "00", "message": "success", "response": { "email": "openapi@naver.com", "nickname": "OpenAP..