티스토리 뷰
[스프링 시큐리티 3장 정리]
스프링 시큐리티는 기본 Security 네임스페이스 설정을 사용하더라도 기본적인 로그인, 인증, 권한부여의 기능 구현이 가능함.
1. 로그인 / 로그아웃 이해
- 헤더/푸터 페이지 구성(태그 라이브러리를 활용)
- 헤더/푸터 페이지 구성(태그 라이브러리를 활용)
- 폼 액션의 경우, UsernamePasswordAuthentification 서블릿 필터에서 설정한 액션과 일치해야 함.
폼의 기본 액션 값은 j_spring_security
- <intercept-url>태그 설정을 통하여 로그인 페이지로 접근할 수 있는 URL 및 액세스 권한을 설정해야 함
▶︎ 스프링 시큐리티의 모든 URL 요청에 대해 위에서 아래로 내려오는(top to bottom) 순서대로 권한부여 규칙을 해석해 적용
▶︎ ex)
<intercept-url pattern="/login.do" access="permitAll">
<intercept-url pattern="/*" access="hasRole("ROLE_USER")"
- 로그아웃은 일반적으로 사이트에서 보호되지 않은 영역으로의 이동/리다이렉트를 뜻함.
▶︎ 모든 URL 요청은 서블릿 요청으로 리졸브되기 전에, 항상 필터 체인을 통과함.(중요)
▶︎ ex)
<logout invalidate-session="true"
logout-sucess-url="/"
logout-url="/j_spring_security_logout" />
: /j_spring_security_logout의 경우, 컨트롤러 및 서블릿에 맴핑된 실제 주소가 아닌, 가상의 url
logout-success-url 속성의 경우, 로그아웃이 정상적으로 수행된 후 리다이렉트 될 주소에 대한 설정
▶︎ 로그아웃은 크게 3단계로 이뤄짐 -> 세션 무효화 / SecurityContext초기화 / logout-sucess-url에 지정된 url redirect
▶︎ LogoutHandler 구현이 직접 가능하며, 세션 초기화 및 사용자 인증 관련 정보가 남지 않도록 할 수 있다.
-
2. Remember Me 기능 구현
- 쿠키를 암호화하고, 사용자 브라우저에 저장해 재방문하는 사용자를 기억하는 기능
: rememberMe 쿠키 값을 가지고 있으면, 별도의 인증 절차를 거치지 않고 로그인 및 인증 처리
- 기본 설정
<remember-me key='jbcpPetStore'>
▶︎ key : 쿠기에 대한 고유값 / token-validity-seconds : 시간 범위를 설정, 설정 시간에만 유효(초단위)
- 동작 원리
▶︎ 사용자명 / 쿠기 만료 일자 / 만료 일자, 사용자명, 비밀번호에 대한 MD5 해시값 / remember-me태그 기본 key 값
: 기본적으로 base64 인코딩 처리 => 임의 길이를 갖는 압축된 텍스트로 반환(다이제스트)
▶︎ 입력이 된 값의 인코딩된 값과 저장되어 있는 인코딩값과 비교 검증을 통하여 일치 유무 판단
: 쿠키 값을 디코딩 후 검증
- 완전히 인증된 세션과 rememberMe를 이용한 세션의 구분이 분명하게 필요
▶︎ rememberMe 세션에 대해서는 완전한 인증(fullyAuthenticated)을 받도록 해야 함.
: <intercept-url> 설정 및 내부의 SpEL 표현식의 조합을 통하여 설정 가능
- IP주소를 인식하는 rememberMe 서비스 개발
▶︎ 클라이언트의 IP 주소를 기반으로 하여, MD5 해시값을 생성하여 http 통신 중에 발생할 수 있는 악의적인 접근에 대해서
차단이 가능함.
▶︎ TokenBasedRememberMeServices 부모 클래스를 상속, onLoginSuccess, makeTokenSignature, setCookie 및
processAutoLoginCookie 매서드를 오버라이드하여 IP주소를 받아오고 이를 적절하게 변환처리하여 rememberMe 쿠키값에
저장할 수 있도록 오버라이드 메소드 로직을 구성.
▶︎ 위에서 작성된 rememeberMe 서비스에 대해서는 빈을 등록하여 (위에서 작성한 클래스에 설정자 초기화를 통하여) 이를
<remember-me> 설정에서 참조할 수 있도록 service-ref 속성값을 지정.
▶︎ 추가적으로 <remember-me> 속성값 설정을 통하여 폼에서 넘어오는 remember_me 값에 대해서 사용자가 지정이 가능
3. 비밀번호 찾기 및 사용자 관리 기능 개선,추가
- UserDetailService 인터페이스 구현체를 상속하여 기본 기능 제공
(인메모리 기반으로 디비 및 저장방식에 얽매이지 않고 프레임워크에서 제공하는 확장 기능의 흐름과 설계에만 집중)
(하드코딩된 사용자 목록을 사용하여 단위 테스트를 작성할떄 주로 사용)
- InMemoryDaoImpl 인메모리 크리덴셜 저장소를 사용하여 UserDetails를 저장
▶︎ InMemoryChangePasswordDaoImpl을 사용하여 InMemoryDaoImpl 상속 및 시큐리티 설정
'Programing > Java' 카테고리의 다른 글
[Maven] 주요 개념 / 내용 정리 (0) | 2016.04.19 |
---|---|
[Mybatis] Stored Procedure 호출 샘플 (0) | 2016.02.29 |
[MAC] JDK Version 변경 (0) | 2016.01.14 |
[Spring Security] 4장 내용 정리 (0) | 2016.01.02 |
이클립스 속도 향상 (eclipse.ini 수정) (0) | 2015.01.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- package.js
- node.js
- Sublime Text 2
- 스프링
- EJS
- Spring MVC
- Spring
- cluster
- HttpClient
- springboot
- tomcat
- HTTP
- jade
- Prototype
- implicit prototype chain
- Package Control
- WebFlux
- RestTemplate
- http method
- Squelize.js
- ecma
- maven
- Spring Boot
- Handlebars
- Til
- Kotlin
- Sublime Text 3
- Express.js
- SideBarEnhancements
- pm2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함