본문 바로가기

Spring9

Spring Security OAuth2 인증서버 만들기 01 0. 서론 각기 다른 기능을 가진 독립된 서비스들을 만들어 제공하려고 할 때, 말하자면 Micro Service Architecture를 사용한 서비스 개발을 하고자 할 때, 각 서비스에 대한 사용자들을 어떻게 관리하는 것이 좋을까 ? 각 서비스에서 관리하는 것이 아닌, 통합하여 한 곳에서 관리하려면 어떻게 해야할까? 이에 대한 고민에서 출발하여 찾게된 것이 OAuth 다. 각 서비스에 접근하고자 하는 사용자는 맨 처음 'Heowon Service (가제)' 에 접근해 회원가입을 해야한다. Heowon Service 는 사용자의 계정, 비밀번호, 이메일주소 등 개인정보를 가지고 있게 된다. 회원가입을 마친 회원이 'TeamComm Service' 에 접근하려고 하면 다시 해당 서비스에 가입할 필요가 없다.. 2019. 10. 10.
Spring Security OAuth2 인증서버 만들기 02 2. Spring Boot 로 OAuth 인증서버 만들기 Spring Boot 와 Spring Security 를 통해 인증 및 리소스 서버를 만들어 보자. 인증서버와 리소스 서버는 분리할 수도 있지만, 먼저 간단한 구현을 위해 하나로 만들어 볼 것이다. 의존성 및 프로젝트 구조는 다음과 같다. 프로젝트 구조에서 알 수 있듯이 총 세 가지의 설정파일이 필요한데, 각각 - 인증 서버에 대한 설정(AuthServerConfig) - 리소스 서버에 대한 설정(ResourceServerConfig) - OAuth 와 별개인 전반적인 서버에 대한 인증 설정(SecurityConfig) 이다. AuthServerConfig import org.springframework.security.oauth2.config.a.. 2019. 10. 10.
Spring Framework : Transaction Spring 에서의 트랜잭션 처리방법엔 크게 선언에 의한 트랜잭션, 프로그램에 의한 트랜잭션 두 가지가 있다.여기서는 선언에 의한 트랜잭션에 대해 알아볼 것이다. 선언에 의한 트랜잭션 방법에는 다시 두 가지가 있다. AOP와 tx네임스페이스를 이용하는 방법@Transactional 어노테이션을 이용하는 방법 AOP와 tx네임스페이스를 이용하는 방법어노테이션 방식에 비해 선언은 조금 복잡해보이지만 코드에 전혀 영향을 주지 않고 일괄적으로 트랜잭션을 적용하거나 변경할 수 있다.따라서 트랜잭션을 적용할 대상이 아무리 늘어나도 번거롭게 트랜잭션 관련 설정을 변경해주거나 추가할 필요가 없다.예를들어 설정을 통해 get으로 시작하는 모든 메소드에 대해 읽기전용 속성을 부여할 수 있다. @Transactional 어.. 2017. 6. 14.
Spring Framework : Spring Security @Valid @Valid 어노테이션을 사용하면 데이터의 유효성 검사를 매우 쉽게 할 수 있다. 보통 데이터 검증을 프레젠테이션 계층에서 하거나, 서비스 계층에서 하는 방식을 택한다.하지만 @Valid는 원천적으로 등록 오류를 피하기 위해 객체 자체에 검증모델을 주입하는 방식을 채택하고 있다. 해당 데이터 객체(DTO 또는 VO) 클래스에 원하는 검증 어노테이션을 작성하고컨트롤러에서 해당 객체 파라미터 앞에 @Valid 어노테이션을 붙이면 끝이다. @Valid에는 기본적으로 14개의 검증 어노테이션을 제공한다. @AssertFalse : false 값만 통과 가능 @AssertTrue : true 값만 통과 가능 @DecimalMax(value=) : 지정된 값 이하의 실수만 통과 가능 @DecimalMin(value.. 2017. 6. 9.
Spring Framework : Spring Security 패스워드 암호화 스프링 시큐리티 암호화 클래스 종류 BCryptPasswordEncoder스프링 시큐리티에서 기본적으로 사용하는 암호화 방식으로, 암호화가 될 때마다 새로운 값을 생성한다.임의적인 값(salt)을 추가해서 암호화하지 않아도 된다. StandardPasswordEncoderSHA-256 암호화를 사용한다. NoOpPasswordEncoder암호화를 사용하지 않을 때. 2017. 6. 9.
Spring Framework : Spring Security 인증, 권한부여 스프링 시큐리티는 서블릿 필터를 이용하며 내부적으로 여러 개의 필터들을 포함하고 있다. 먼저 Filter 인터페이스를 구현하는 FilterChainProxy 클래스의 doFilter()호출내부에서 FilterChainProxy 클래스의 내부 클래스인 VirtualFilterChain 클래스의 doFilter() 호출VirtualFilterChain은 스프링 시큐리티가 지원하는 필터 클래스(11개) 들을 List에 관리하며, 순차적으로 doFilter()를 호출하도록 한다. 스프링 시큐리티에서는 인증 관리자, 접근 결정 관리자가 사용자의 리소스 접근을 관리한다.인증 관리자는 UsernamePasswordAuthenticationFilter 에 존재하고접근 결정 관리자는 FilterSecurityInterc.. 2017. 6. 8.
Spring Framework : Spring Security 권한설정 DB연동하기 Spring Security의 FilterSecurityInterceptor 클래스에 설정되는 것은 세 가지가 있다.1. 인증 정보 - Authentication Manager2. 대상 정보 - Security MetadataSource3. 판단 주체 - AccessManager DB를 이용한 자원접근을 위해선 기본 설정을 바꿔야 한다.인증 정보는 태그로 만들어지고 FilterSecurityInterceptor 클래스에 설정되기 때문에 문제가 없지만, 대상 정보는 태그에서 읽어오는 것이 아닌 DB에서 읽어오는 것으로 바꿔주어야 한다. 판단 주체 또한 기본설정된 Voter가 DB에서 읽어온 값으로 대상 정보를 판단하도록 커스터마이징이 필요하다. 기본 설정된 대상 정보 클래스는org.springframewo.. 2017. 6. 5.
Spring Framework : Spring security customizing 스프링 시큐리티에서 기본적으로 제공하는 org.springframework.security.core.userdetails.UserDetails 인터페이스를 통해 인증받은 사용자의 정보를 조회할 수 있다.하지만 기본설정으로 사용하면 사용자의 이름, 패스워드 외에 다른 정보를 불러오는 것은 불가능하다. 이 때, UserDetails 인터페이스를 구현하는 커스텀 클래스를 만듦으로써 원하는 정보를 조회할 수 있다.(UserDetails 인터페이스를 구현한 org.springframework.security.core.userdetails.UserDetails.User 클래스를 참고하면 좋다)UserDetails 인터페이스를 구현한 클래스는 말그대로 user의 정보를 담고 있는 클래스이다. 본인이 원하는 정보(계정.. 2017. 5. 29.
Spring Framework : 한글처리 web.xml123456789101112131415161718 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* Colored by Color Scriptercs 추가 후 jsp 파일의 페이지 인코딩을 UTF-8 로 맞춰준다. 2017. 2. 20.