티스토리 뷰
스프링 시큐리티에서는 여러 가지의 사용자 스토어 구성 방법을 제공한다.
스프링 시큐리티 사용자 스토어
- 인메모리(in-memory) 사용자 스토어
- JDBC 기반 사용자 스토어
- LDAP 기반 사용사 스토어
- 커스텀 사용자 명세 서비스
하지만 스프링 시큐리티 기본 설정들을 그대로 이용하기에는 부족한 것들이 많기 때문에 커스터마이징을 하는게 더 좋다.
사용자 인증의 커스터마이징
- 스프링 설정 클래스를 만들고 @EnableWebSecurity 어노테이션을 추가하고 WebSecurityConfigurerAdapter 클래스를 상속
- PasswordEncoder를 Bean 객체에 추가하고 AuthenticationManagerBuilder 객체를 매개변수로 하는 configure 메소드를 오버 라이드 한다.
- 사용자 정의 서비스 클래스를 UserDetailsService 인터페이스 구현체로 만든다.
- Entity 클래스를 UserDetails 인터페이스 구현체로 만든다.
웹 요청 보안 처리하기
요청 경로가 보안 처리되는 방법을 정의하는 구성 메소드
메소드 | 하는 일 |
access(String) | 인자로 전달된 SpEL 표현식이 true면 접근을 허용한다. |
anonymous() | 익명의 사용자에게 접근을 허용한다. |
authenticated() | 익명이 아닌 사용자로 인증된 경우 접근을 허용한다. |
denyAll() | 무조건 접근을 거부한다. |
fullyAuthenticated() | 익명이 아니거나 또는 remember-me가 아닌 사용자로 인증되면 접근을 허용한다. |
hasAnyAuthority(String...) | 지정된 권한 중 어떤 것이라도 사용자가 갖고 있으면 접근을 허용한다. |
hasAnyRole(String...) | 지정된 역할 중 어느 하나라도 사용자가 갖고 있으면 접근을 허용한다. |
hasAuthority(String) | 지정된 권한을 사용자가 갖고 있으면 접근을 허용한다. |
hasIpAddress(String) | 지정된 IP 주소로부터 요청이 오면 접근을 하용한다. |
hasRole(String) | 지정된 역할을 사용자가 갖고 있으면 접근을 허용한다. |
not() | 다른 접근 메소드들의 효력을 무효화한다. |
permitAll() | 무조건 접근을 허용한다. |
rememberMe() | remember-me(이전 로그인 정보를 쿠키나 데이터베이스로 저장한 후 일정 기간 내에 다시 접근 시 저장된 정보로 자동 로그인됨)를 통해 인증된 사용자의 접근을 허용한다. |
access() 메소드에 들어가는 SpEL
보안 표현식 | 산출 결과 |
authentication | 해당 사용자의 인증 객체 |
denyAll | 항상 false를 산출한다. |
hasAnyRole(역할 내역) | 지정된 역할 중 어느 하나라도 해당 사용자가 갖고 있으면 true |
hasRole(역할) | 지정된 역할을 해당 사용자가 갖고 있으면 true |
hasIpAddress(IP 주소) | 지정된 IP 주소로부터 해당 요청이 온 것이면 true |
isAnonymous() | 해당 사용자가 익명 사용자이면 true |
isAuthenticated() | 해당 사용자가 익명이 아닌 사용자로 인증되었으면 true |
isFullyAuthenticated() | 해당 사용자가 익명이 아니거나 또는 remember-me가 아닌 사용자로 인증 되었으면 true |
isRememberMe() | 해당 사용자가 remember-me 기능으로 인증되었으면 true |
permitAll | 항상 true를 산출한다. |
principal | 해당 사용자의 principal 객체 |
커스텀 로그인 페이지 경로 지정하기
.and()
.formLogin() // 커스텀 로그인 폼을 구성하기 위해 호출
.loginPage("/login") // 커스텀 로그인 페이지 경로
.defaultSuccessUrl("/design") // 로그인 후에 /design 페이지로 이동
// 사용자가 로그인 전에 어떤 페이지에 있었는 지와 무관하게 로그인 후에는 무조건 /design 페이지로 이동
// .defaultSuccessUrl("/design", true)
로그아웃하기
.and()
.logout()
.logoutSuccessUrl("/") // 로그아웃 이후에 홈페이지로 이동
<!-- 로그아웃 기능을 제공하기 위해 해당 뷰에 로그아웃 폼과 버튼을 추가해야 한다 -->
<form method="POST" th:action="@{/logout}">
<input type="submit" value="Logout"/>
</form>
'TIL' 카테고리의 다른 글
Java 컬렉션 프레임워크(Collection Framework) 요약 (0) | 2021.02.17 |
---|---|
GitHub 기본 패스워드 인증 (0) | 2021.02.15 |
자바 람다식에 대해 (0) | 2021.02.08 |
자바(Java) 스레드(Thread) 공부 (0) | 2021.02.07 |
스프링 어노테이션에 대해 알게 된 사실 (0) | 2021.02.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Gson
- 도커
- java
- IDE
- framework
- Stream
- EC2
- homebrew
- 타임리프
- Spring
- Set
- 유효성 검사
- 스트림
- Github
- Thymeleaf
- git
- Jackson
- 인텔리제이
- 이클립스
- bootstrap
- 데이터베이스
- interface
- S3
- 충돌에러
- Docker
- gem
- JSON
- optional
- rbenv
- IntelliJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함