Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터
- 플러터
- baekjoon
- JPA
- postgresql
- 파이썬
- python
- 데이터베이스
- 네트워크
- 리눅스
- 자바
- 백준
- Java
- DB
- springboot
- 스프링
- spring
- Flutter
- 시큐리티
- 스프링 부트 쇼핑몰 프로젝트 with JPA
- 자바스크립트
- Spring Security
- 자료구조
- 스프링부트
- CS
- backjoon
- 프로그래머스
- javascript
- CS지식
- Oracle
Archives
- Today
- Total
Jin's Dev Story
[스프링 부트 쇼핑몰 프로젝트 with JPA] 4. 페이지 권한 설정 본문
Web & Android/스프링 부트 쇼핑몰 프로젝트 with JPA
[스프링 부트 쇼핑몰 프로젝트 with JPA] 4. 페이지 권한 설정
woojin._. 2023. 10. 15. 10:25이 내용은 스프링 부트 쇼핑몰 프로젝트 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 |