이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.
1. 상품 등록 페이지 (미완성)
- ADMIN (관리자) 계정만 접근할 수 있는 상품 등록 페이지
상품등록 페이지입니다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layouts/layout1}">
<div layout:fragment="content">
<h1>상품등록 페이지입니다.</h1>
</div>
</html>
2. 상품 등록 페이지 접근 Controller
- 상품 등록 페이지에 접근하는 Controller
@Controller
@RequiredArgsConstructor // @Autowired로도 쓸 수 있음
public class ItemController {
// 웹 페이지로 이동
@GetMapping("/admin/item/new")
public String itemForm() {
return "item/itemForm";
}
3. AuthenticationEntryPoint
- AuthenticationEntryPoint 인터페이스 구현 클래스
- 인증되지 않은 사용자가 리소스 요청 시 “Unauthorized” 에러를 발생시킴
// 인증되지 않은 사용자 요청 시 에러
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.web.client.HttpClientErrorException;
import java.io.IOException;
public class CustomEntryPoint implements AuthenticationEntryPoint {
@Override
// 인증되지 않은 사용자가 리소스를 요청할 경우, Unauthorized 에러 발생하고 나머지는 로그인 페이지로 리다이렉트.
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
}
4. SecurityConfig
- HttpServletRequest에 대해서 security 처리를 수행
- anyRequest() - 위에 존재하는 url patterns들을 제외한 나머지 요청들
http.authorizeHttpRequests() // 인증 여부 확인 -> 스프링 3.0 이하 버전은 authorizeRequests()로 설정
// 스프링 3.0 이하 버전은 antMatchers(), mvcMatchers(), regexMatchers()으로 사용
.dispatcherTypeMatchers(DispatcherType.FORWARD).permitAll() // 페이지 이동할 경우 default로 인증이 걸리도록 되어있기 때문에 추가
.requestMatchers("/css/**", "/js/**").permitAll() // 모든 사람에게 css 적용
.requestMatchers("/", "/member/**", "/item/**", "/images/**").permitAll() // 아무나 페이지에 들어올 수 있고, member, item 밑에 있는 애들은 모두 permit 허용
.requestMatchers("/admin/**").hasRole("ADMIN") // admin인 애들만 admin에 접속 가능
.anyRequest().authenticated(); // 인증 받기
- 권한에 맞지 않는 사용자가 리소스에 접근할 때 수행되는 핸드러
http.exceptionHandling() // 권한이 없는 경우
.authenticationEntryPoint(new CustomEntryPoint());
5. Role.ADMIN
- 현재 Member 객체 생성 시 Role.USER 값이 default로 설정되어 있음
- Role.ADMIN으로 변경 후 동작 확인
'Web & Android > 스프링 부트 쇼핑몰 프로젝트 with JPA' 카테고리의 다른 글
[스프링 부트 쇼핑몰 프로젝트 with JPA] 6-1. [상품 등록] Entity, DTO, View (0) | 2023.10.15 |
---|---|
[스프링 부트 쇼핑몰 프로젝트 with JPA] 5. Entity 공통 속성 공통화(Auditing) (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 3. 로그인/로그아웃 (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 2-3. 회원가입 검증 (0) | 2023.10.15 |
[스프링 부트 쇼핑몰 프로젝트 with JPA] 2-2. 회원가입 페이지 (0) | 2023.10.15 |