Jpql, 시큐리티

김정현·2025년 5월 14일
0

Auditing을 이용한 엔티티 공통 속성화

  1. @MappedSuperclass
  2. AuditorAware 인터페이스
  3. @EntityListeners
  4. @EnableJpaAuditing

JPQL

-설정된 주기별로 실행될 함수를 설정

@Scheduled
1) fixedDelay
: 작업 완료 후 고정 시간 지연 간격

2) fixedRate
: 고정 시간 간격으로 실행

3) initialDelay
: 작업 시작 전 시간 간격 지연

4) cron
: 상세한 실행 주기를 설정할 때

0 0 */1****
1시간 마다 실행 정각 실행

0 30 13,18***

오후 1시 30분
오후 6시 30분 실행

5) @EnableScheduling
: 스케줄링 설정 활성화

스프링 시큐리티

-인증,인가

  1. 의존성 설치
  2. 스프링 시큐티리 설정
  3. 회원가입 구현

1) UserDetails 인터페이스 : DTO

2) UserDetailsService 인터페이스 : Service

  1. 시큐리티를 이용한 회원 인증(로그인) 구현
  2. 로그인 정보 가져오기
    1) Principal 요청메서드에 주입 : getName() : 아이디 : 요청 메서드의 주입
    2) SecurityContextHolder를 통해서 가져오기
    3) @AuthenticationPrincipal : UserDetails 구현 객체 주입, 요청 메서드의 주입시 밖에 사용 가능

4) Authentication
Object getPrincipal(...) : UserDetails의 구현 객체
boolean isAuthenticated() : 인증 여부

/error 템플릿 경로 : 응답 코드.html

  1. thymeleaf-extras-springsecurity6
    1) xmlns:sec="http://www.thymeleaf.org/extras/spring-security"

    2) sec:authorize="hasAnyAuthority(...)", sec:authorize="hasAuthority(...)"
    3) sec:authorize="isAuthenticated()" : 로그인 상태
    4) sec:authorize="isAnonymous()" : 미로그인 상태

    5) csrf 토큰 설정하기
    - ${_csrf.token}
    - ${_csrf.headerName}

  2. 페이지 권한 설정하기

    • AuthenticationEntryPoint
  3. Spring Data Auditing + Spring Security

  • 로그인 사용자가 자동 DB 추가
    1) AuditorAware 인터페이스

POST 요청시 CSRF 토큰 검증 : 검증 실패시 403

  • 자바 스크립트 ajax 형태로 POST 데이터를 전송할시 CSRF 토큰 검증
  1. @EnableMethodSecurity

1) @PreAuthorize: 메서드가 실행되기 전에 인증을 거친다.
2) @PostAuthorize: 메서드가 실행되고 나서 응답을 보내기 전에 인증을 거친다.

3) 사용할수 있는 표현식

  • hasRole([role]) : 현재 사용자의 권한이 파라미터의 권한과 동일한 경우 true
  • hasAnyRole([role1,role2]) : 현재 사용자의 권한디 파라미터의 권한 중 일치하는 것이 있는 경우 true
  • principal : 사용자를 증명하는 주요객체(User)를 직접 접근할 수 있다.
  • authentication : SecurityContext에 있는 authentication 객체에 접근 할 수 있다.
  • permitAll : 모든 접근 허용
  • denyAll : 모든 접근 비허용
  • isAnonymous() : 현재 사용자가 익명(비로그인)인 상태인 경우 true
  • isRememberMe() : 현재 사용자가 RememberMe 사용자라면 true
  • isAuthenticated() : 현재 사용자가 익명이 아니라면 (로그인 상태라면) true
  • isFullyAuthenticated() : 현재 사용자가 익명이거나 RememberMe 사용자가 아니라면 true

0개의 댓글