이 내용은 스프링 부트 쇼핑몰 프로젝트 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 |