1110 spring

yunha·2023년 11월 10일
0

JSP/Spring

목록 보기
32/36

스프링 시큐리티 애너테이션

[접근 제한 정책]
Pre : before(메소드 실행 전)
Authorization : 권한(인가)
-> 메소드 레벨에서 처리 가능

@PreAuthorize("hasRole('ROLE_MEMBER')") --> security-context에서 설정했던 거
	@GetMapping("/register")
	public String register() {
		return "board/register";
	}

스프링 시큐리티 애너테이션을 활성화
- pre-post-annotations="enabled" -> 골뱅이PreAuthorize, 골뱅이PostAuthorize 활성화
*** PreAuthorize : 특정 메소드를 실행하기 전에 role 체킹
PostAuthorize : 특정 메소드를 실행한 후에 role 체킹
- secured-annotations="enabled" -> 골뱅이Secured를 활성화
Secured : 스프링 시큐리티 모듈을 지원하기 위한 애너테이션

<security:global-method-security pre-post-annotations="enabled"
   secured-annotations="enabled" />

예외 처리

AOP


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   .
   .
   .
   xmlns:aop="http://www.springframework.org/schema/aop"
   
   ==> 아래 사용 가능
   
   <!-- 스프링 AOP 활성화 -->
   <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
   
   <!-- kr.or.ddit.aop 패키지를 컴포넌트 스캔 대상으로 등록 -->
   <context:component-scan base-package="kr.or.ddit.aop"></context:component-scan>

package) .aop =>

@Component
@Aspect --> root.context.xml렁 연결됨. 위에랑 짝궁
public class ServiceLoggerAdvice {

Aspect(애스팩트) : AOP의 단위가 되는 횡단 관심사

  • 횡단 관심사(Cross-Cutting Concern) : 핵심(core) 비즈니스 로직(삼겹살구어먹기, 빵또아의 아이스크림)과
    다소 거리가 있지만,
    여러 모듈에서 공통적이고 반복적인 처리를 요구하는 내용(불판닦기, 불판교체, 빵또아의 빵)

  • 횡단 관심사 분리(Separation Of Cross-Cutting Concern) : 횡단 관심사에 해당하는
    부분(불판닦기, 불판교체, 빵또아의 빵)을 분리해서 한 곳으로 모으는 것을 의미

  • Component : 골뱅이Aspect와 짝궁. component-scan시 "여기 봐주세요"라는 의미

  • JoinPoint : 어드바이스가 적용될 수 있는 위치

  • Advice : 어떤 부가기능(불판닦기)을 언제(삼겹살을 굽기 전(Before)에) 사용할지 정의
    * 언제?
    - Before : 조인포인트 전에 실행. (삼겹살을 굽기 직전에)
    - After : 조인 포인트에서 처리가 완료된 후 실행(삽겹살을 굽고 먹은 직후 실행)
    - Around : 조인 포인트 전후에 실행(삽겹살을 굽기 직전과 먹은 직후 실행)
    - After Returning : 조인 포인트가 정상적으로 종료 후 실행
    - After Throwing : 조인 포인트에서 예외 발생 시 실행. 예외가 발생안되면 실행 안함

    	//로보트에 : AOP대상(로그, 보안, 트랜잭션, 에러)
    	//포인트컷 표현식. 별쩜쩜별괄호쩜쩜괄호
    	//excution : 포인트컷(대상(메소드)을 선별하는 것) 지정자
    	//(* : 임의의 1개의 리턴타입
    	//.. : 임의의 0개 이상
    	//kr.or.ddit.*..*(..) :
    	//          패키지 밑의 각각의 패키지가 있고
    	//         그 하위에 모든 파일/패키지
    	//         각각의 메소드가 있고
    	//         (..) : 모든 파라미터
    	//결론 : 포인트컷에 포함된 메서드를 대상으로 그 메서드가 실행되기 전에 로그를 출력해보자
@Before("execution(* kr.or.ddit.*..*(..))")
	public void startLog(JoinPoint jp) {
		log.info("startLog");
		// .getSignature() : 어떤 클래스의 어떤 메서드가 실행되었는지 보여줌. 파라미터 타입은 무엇인지 보여줌
	    // kr.or.ddit.service.BoardService.register(BoardVO)
		log.info("startLog : " + jp.getSignature());
		// .getArgs() : 전달 된 파라미터 정보를 보여줌
	    // [BoardVO [boardNo=127,title=개똥이]]
	    log.info("startLog : " + Arrays.toString(jp.getArgs()));
	}
profile
기록

0개의 댓글