본문 바로가기
Spring/Spring 기초

Security 접근거부 처리(사용자 정의)

by 미눅스[멘토] 2023. 8. 17.
728x90

 

 

security-context.xml에  bean객체 생성

<!-- xmlns:security는 스프링 시큐리티가 제공하는 XML 네임스페이스를 활성화 -->
	<!-- 인가(authorization) 불허
		bean : 객체 / class="우리가 만든 클래스" / id : 우리가 만든 클래스를 인스턴스화 하여 만든 객체명
	 -->
	<bean id="customAccessDenied"
		class="kr.or.ddit.cecurity.CustomAccessDeniedHandler">
	</bean>

 

 

그리고 밑에 이것도 작성

      <!-- 1. 접근 거부 처리(사용자 정의)
      	접근 거부가 발생한 상황에 단순 메시지 처리 이상의 다양한 처리를 하고 싶다면
      	AccessDeniedHandler를 직접 구현햐야 함
       -->
      <security:access-denied-handler ref="customAccessDenied"/>
      <!--

 

 

 

 

 

 

 

패키지 및 클래스 생성

 

 

 

package kr.or.ddit.cecurity;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class CustomAccessDeniedHandler implements 
	AccessDeniedHandler{
	/*
	 공지사항 등록 화면(/notice/register)은
	 일반회원(member/java)이 접근할 수 없는 URI이고
	 관리자(admin/java)만 접근 가능함.
	 사용자 접근 거부 처리자(CustomAccessDenieHandler)에서
	 접근 거부 처리 페이지 (/security/accessError)로 리다리렉트 시킴
	 */
	@Override
	public void handle(HttpServletRequest request
			, HttpServletResponse response,
			AccessDeniedException accessDeniedException) throws IOException, ServletException {
		log.info("handle");
		
		response.sendRedirect("/security/accessError");
	}
}