ADMIM 계정만 접근할 수 있는 상품 등록 페이지 생성
templates 아래에 item 폴더 생성후 itemForm 파일 만든다.
<!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>
상품등록 페이지에 접근할 수 있도록 ItemController 클래스를 생성
@Controller
public class ItemController {
@GetMapping(value="/admin/item/new")
public String itemForm() {
return "item/itemForm";
}
}
ajax의 경우 http request header에 XMLHttpRequest라는 값이 세팅되어 요청이 오는데, 인증되지 않은 사용자가 ajax로 리소스를 요청할 경우 "Unauthorized"에러를 발생시키고 나머지 경우는 로그인 페이지로 리다이렉트로 시켜준다.
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint{
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
}
@Configuration // 빈 등록(Ioc관리)
@EnableWebSecurity
public class SecurityConfig {
@Autowired
UsersService usersService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("/user/login") //로그인페이지 URL
.defaultSuccessUrl("/") //로그인 성공시 이동할 페이지
.usernameParameter("email") // 로그인시 사용할 파라미터 이름 설정
.failureUrl("/user/login/error") // 로그인 실패시 이동할 URL
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/user/logout"))//로그아웃 URL
.logoutSuccessUrl("/"); //로그아웃 성공시 URL
http.authorizeRequests()
.mvcMatchers("/css/**", "/js/**", "/images/**").permitAll()
.mvcMatchers("/", "/user/**", "/item/**", "/images/**").permitAll()
.mvcMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated();
http.exceptionHandling()
.authenticationEntryPoint(new CustomAuthenticationEntryPoint());
return http.build();
}
}
User 엔티티 생성시 Role을 ADMIN으로 생성하도록 설정 변경
users.setRole(Role.ADMIN);
다시 회원가입시 ADMIN으로 가입되어서 상품등록메뉴와 상품관리메뉴랑 상품등록 페이지가 접속 되는걸 확인할 수 있다.