java, spring

[Spring] Spring Web Security의 설정

isaac.kim 2021. 9. 24.
728x90
반응형

[Spring] Spring Web Security의 설정

 

도움이 되셨다면 광고 한 번 클릭 부탁드립니다.
한 번의 클릭이 제게 큰 힘이 됩니다! :)

 

이전 글

2021.09.24 - [Spring] - [Spring] Spring Web Security

 

반응형

 

스프링 시큐리티는 스프링의 여러 하위 프로젝트 중 하나이므로, https://spring.io/projects/spring-security 같은 페이지를 이용해 필요한 버전을 추가합니다.

 

다양한 처리를 위해 다음 3개의 라이브러리 + JSP에서의 스프링 시큐리티 관련 태그 라이브러리 spring-security-taglib을 추가합니다.

Maven Repo

 

pom.xml 에 라이브러리 추가

security-context.xml 생성

스프링 시큐리티는 단독으로 설정할 수 있기 때문에 기존의 root-context.xml이나 servlet-context.xml과는 별도로 security-context.xml을 따로 작성하는 것이 좋습니다.

 

security-context.xml은 네임스페이스에서 beans, security 항목을 체크합니다.

 

security-context.xml 작성

 

스프링 시큐리티가 동작하기 위해서 Authentication Manager라는 존재와 스프링 시큐리티의 시작 지점이 필요하기 때문에 위와 같이 최소한의 설정을 지정한 후 실행합니다.

 

web.xml 설정

스프링 시큐리티가 스프링 MVC에서 사용되기 위해서는 필터를 이용해서 스프링 동작에 관여하도록 설정합니다.

 

web.xml의 일부 1

web.xml의 일부 2

 


시큐리티가 필요한 URI 설계

스프링 시큐리티의 최소한의 설정이 완료되었다면 시큐리티에 의해 제어가 필요한 URI를 설계하고 적용합니다.

 

* /sample/all -> 로그인을 하지 않은 사용자도 접근 가능한 URI

* /sample/member -> 로그인 한 사용자들만 접근할 수 있는 URI

* /sample/admin -> 로그인 한 사용자들 중에서 관리자 권한을 가진 사용자만이 접근할 수 있는 URI

 

com.project.controller 패키지 내에 SampleController를 작성하고 해당 URI에 맞는 메서드를 작성합니다.

 

views 폴더에는 sample 폴더를 작성하고 해당 URI에 맞는 화면을 작성합니다.

서버에서 프로젝트를 실행하고 해당 URI가 정상적으로 동작하는지 확인합니다.

(서버의 프로젝트 경로는 '/controller/'가 아닌 '/' 경로를 사용하도록 세팅.)

 

페이지는 내용만 구분할 수 있도록 작성합니다.


인증(Authentication)과 권한 부여(Authorization - 인가)

 

'인증(Authenticaiton)'은 '자신을 증명하는 것' 입니다. 다시 말해 자기 스스로가 무언가 자신을 증명할 만한 자료를 제시하는 것입니다.

'권한 부여(Authorization)'는 남에 의해서 자격이 부여된다는 점에서 차이가 있습니다.

 

스프링 시큐리티에서 가장 중요한 역할을 하는 존재가 인증을 담당하는 AuthenticationManager(인증 매니저)라는 존재입니다. AuthenticationManager는 다양한 방식의 인증을 처리할 수 있도록 아래와 같은 구조로 설계되어 있습니다.

 

ProviderManager는 인증에 대한 처리를 AuthenticationProvider라는 타입의 객체를 이용해서 처리를 위임합니다.

 

AuthenticationProvider(인증 제공자)는 실제 인증 작업을 진행합니다. 이때 인증된 정보에는 권한에 대한 정보를 같이 전달하게 되는데 이 처리는 UserDetailsService라는 존재와 관련 있습니다. UserDetailsService 인터페이스의 구현체는 실제로 사용자의 정보와 사용자가 가진 권한의 정보를 처리해서 반환하게 됩니다.

 

 

개발자가 스프링 시큐리티를 커스터마이징 하는 방식은 크게 AuthenticationProvider를 직접 구현하는 방식과 실제 처리를 담당하는 UserDetailsService를 구현하는 형태를 사용하는 것만으로도 충분하지만, 새로운 프로토콜이나 인증 구현 방식을 직접 구현하는 경우에는 AuthenticationProvider 인터페이스를 직접 구현해서 사용합니다.

 


도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 
한 번의 클릭이 제게 큰 힘이 됩니다! :)

 

728x90
반응형