0. 시큐리티 태그 라이브러리
스프링의 시큐리티 태그 라이브러리는 스프링 시큐리티와 연결하여 사용자 정보를 확인하고 JSP로 가져오는데 사용할 수 있다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<!-- 인증된 회원정보가 있을 경우 안쪽 태그들이 출력된다. -->
<sec:authorize access="isAuthenticated()"></sec:authorize>
<!-- 인증된 회원정보가 없을 경우 (즉, 익명일 경우) 안쪽 태그들이 출력된다. -->
<sec:authorize access="isAnonymous()"></sec:authorize>
<!-- User 클래스의 멤버변수로 선언했던 VO 클래스의 객체를 꺼내올 수 있다. -->
<sec:authentication var="memVO" property='principal.memVO' />
* 시큐리티 태그의 표현식
| hasRole("ROLE_MEMBER") | ROLE_MEMBER 권한이 있으면 true |
| hasAnyRole("ROLE_MEMBER", "ROLE_ADMIN") | 여러 권한 중 하나라도 해당하는 권한이 있으면 true |
| principal | 인증된 사용자의 사용자 정보 (UserDetails 인터페이스를 구현한 클래스를 가리킴) |
| authentication | 인증된 사용자의 인증 정보 |
| permitAll | 모든 사용자에게 허용 |
| denyAll | 모든 사용자를 거부 |
| isAnonymouse() | 로그인 하지 않은 경우 true |
| isAuthenticated() | 로그인 한 경우 true |
| isFullyAuthenticated() | Remember-me(로그인 저장)로 인증된 경우를 제외한 사용자일 경우에만 true |
* User 클래스의 상속 클래스
principal.memVO는 아래 코드 속 클래스의 필드에 선언된 memVO를 말한다. 즉 principal 객체는 인증 회원 정보로 넘어간 아래의 CustomUser 그 자체를 가리킨다.
package kr.or.ddit.security;
import java.util.Collection;
import java.util.stream.Collectors;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import kr.or.ddit.vo.MemVO;
public class CustomUser extends User {
// 이 객체를 시큐리티 태그를 사용해 JSP에서 사용할 수 있다.
private MemVO memVO;
public CustomUser(String username, String password,
Collection<? extends GrantedAuthority> authorities) {
super(username, password, authorities);
}
public CustomUser(MemVO memVO) {
super(memVO.getUserId(), memVO.getUserPw(),
memVO.getList().stream()
.map(auth -> new SimpleGrantedAuthority(auth.getAuth()))
.collect(Collectors.toList())
);
this.memVO = memVO;
}
public MemVO getMemVO() {
return memVO;
}
public void setMemVO(MemVO memVO) {
this.memVO = memVO;
}
}
'Java > Spring Framework' 카테고리의 다른 글
| [Spring Framework] 시큐리티 설정 정리 (0) | 2023.02.15 |
|---|---|
| [Spring Framework] 스프링 시큐리티 자동 로그인 (0) | 2023.02.14 |
| [Spring Framework] 스프링 시큐리티와 데이터베이스 연동 (0) | 2023.02.14 |
| @PathVariable (0) | 2023.02.08 |
| [Spring Framework] Date 타입 파라미터 (0) | 2023.02.06 |