목록Spring (21)
DOing
이전 포스팅에서는 DB에 있는 유저 정보를 쿼리를 이용해서 인증했다. 이번 포스팅에는 UserDetailsService를 이용하여 인증해보자. UserDetailsService는 원하는 객체를 인증과 권한 체크에 활용할 수 있다. 1. 회원 도메인 생성 회원은 여러개의 권한을 가질 수 있는 구조로 설계하였다. @Data public class MemberVO { private String userid; private String userpw; private String userName; private boolean enabled; private Date regDate; private Date updateDate; private List authList; } © 2021 GitHub, Inc. 2. 권한 ..
이전 포스팅에서는 특정한 계정에 대해서 로그인 처리를 하였다. 이번 포스팅에서는 좀 더 현실적으로 DB를 이용하는 방식을 이용해보자. 1. root-context.xml 확인 dataSource라는 빈이 제대로 지정되어 있는 확인한다. 2. 테이블 생성 3. security-context.xml 수정 4. PasswordEncoder 스프링 시큐리티 5부터는 PasswordEncoder를 지정해야한다. 이전 포스팅에서는 임시로 {noop}을 사용해서 진행했지만 데이터 베이스를 이용하는 경우에는 PasswordEncoder를 사용해야 한다. PasswordEncoder는 패스워드를 암호화 시킨다. 암호화되지 않은 실제 패스워드를 저장하거나 사용하는 일은 위험하다. 때문에 암호화된 패스워드로 저장하고, 사용..
1. 네이버 API에 등록 네이버 오픈 API로 이동해서 애플리케이션을 등록시켜 Client ID, Client Secret을 발급받는다. 2. appliation-oauth.properties 등록 네이버에서는 스프링 시큐리티를 공식 지원하지 않기때문에 그동안 Common-OAuth2Provider에서 해주던 값들도 전부 수동으로 입력해야한다. # registration spring.security.oauth2.client.registration.naver.client-id = (Client ID) spring.security.oauth2.client.registration.naver.client-secret = (Client Secret) spring.security.oauth2.client.regi..
세션저장소에 대해 3가지방법 중 하나를 선택할 수 있다. 1. 톰캣 세션 사용하기 : 디폴트로 선택되는 방식 내장 톰캣(WAS)에 세션을 저장하게 되면 애플리케이션 실행시 항상 초기화가된다. 또 2대 이상의 WAS에서 서비스하고 있다면 톰캣들 간의 세션 동기화를 위한 추가설정이 필요하다. 2. MySQL과 같은 데이터베이스를 세션저장소로 사용하기 : 여러 WAS간의 공용 세션을 사용할 수 있는 가장 쉬운 방법 설정이 간단하지만 결국 로그인 요청마다 DB IO가 발생하여 성능상 이슈가 발생할 수 있다. 보통 로그인 요청이 많이 없는 백오피스, 사내시스템 용도에서 사용한다. 3. Redis와 같은 메모리 DB를 세션저장소로 사용하기 : B2C 서비스에서 가장 많이 사용하는 방식 실제 서비스가 사용되기 위해서..
1. 구글 클라우드 플랫폼에서 인증정보 발급받기 구글 서비스에 신규 서비스를 생성하고 발급된 인증정보(clientId와 clientSecret)을 통해서 로그인 기능과 소셜 서비스 기능을 사용할 수 있으니 발급받아야한다. OAuth 클라이언트 ID를 발급받는다. 그전에 동의화면을 만들어야함으로 동의화면 페이지로 넘어간다. 외부로 만들어주자! 동의화면을 모두 만들었다면 다시 OAuth 클라이언트 ID를 발급페이지로 간다. 애플리케이션유형을 웹으로 지정하고 승인된 리다이렉션 URL을 설정해준다. 승인된 리다이렉션 URL은 인증 성공시에 구글에서 리다이렉트할 URL이다. 스프링부트2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL을 지원하고 있다..
저번 포스팅에서는 로그인과 로그아웃 기능을 구현해보았다. 이번 포스팅에서는 로그인의 성공, 실패 기능을 구현하겠다. 단순히 특정 페이지로 이동할 수도 있고 Handler를 통해서 특정한 로직을 수행하도록 할 수도 있다. 더불어서 로그인은 성공했으나, 사용자가 권한이 없을때 나오는 접근 제한 페이지와 로직도 구현해보자. 💡 이용하기 기본으로 제공되는 로그인 페이지는 위의 그림과 같다. 만약 직접 커스텀을 하고 싶다면 security-context.xml에 아래의 코드를 추가해준다. 이 외에도 태그에서는 로그인에 관련된 다른 일들을 할 수 있다. - username-parameter : 입력한 ID에 대한 파라미터명 - password-parameter : 입력한 PW에 대한 파라미터명 - login-pro..
1. pom.xml의 설정 org.springframework.security spring-security-core 5.0.6.RELEASE org.springframework.security spring-security-web 5.0.6.RELEASE org.springframework.security spring-security-config 5.0.6.RELEASE org.springframework.security spring-security-taglibs 5.0.6.RELEASE 2. security-context.xml 생성 스프링 시큐리티는 단독으로 설정할 수 있기때문에 별도로 security-context.xml을 따로 작성하는 것이 좋다. 네임스페이스에서 시큐리티 항목을 체크한다. XML을..
스프링 시큐리티는 인증 및 권한 부여를 제공하는 스프링 하위 프레임워크이다. 사실상 spring 기반 애플리케이션 보안을 위한 표준이라고 spring 공식 사이트에서 소개하고 있다. 동작 방식 스프링 시큐리티의 기본 동작 방식은 서블릿의 여러 필터와 인터셉터를 이용해서 처리된다. 필터(filter)와 인터셉터(interceptor)는 특정한 서블릿이나 컨트롤러의 접근에 관여한다는 점에서 유사하지만, 필터는 스프링과 무관한 서블릿 자원이고 인터셉터는 스프링의 빈으로 관리되면서 스프링의 컨텍스트 내에 속한다는 차이이다. 필터는 스프링과 무관하지만 인터셉터는 스프링 내부에서 컨트롤러를 호출할때 관여하기 때문에 스프링의 컨텍스트 내에 있는 모든 자원을 활용할 수 있다. 때문에 적용 시기에서도 차이가 보인다. 필..