프레임 워크 스피링 Security

robin Han·2023년 6월 5일
0

Spring

목록 보기
11/13

인터셉터

  • Spring MVC의 인터셉터는 Controller의 호출 이전과 이후에 추가적인 기능을 할수있는 구조를 제공
  • 특정 URL의 접근 제어 가능
  • AOP의 범용적 기능과 유사

필터와 인터셉터 :

필터: tomcat이 제공하는 해당 되는 변수만 사용할수있다 URL 체크, applcation context 접근할수없다.

인터셉트 : dispatcher servlet 다음에 불린다, application context에 있는 빈들을 사용할수있다. 스피링 빈으로 등록된 컨트롤러나 서비스 객체를 주입받는다.

인터셉터 처리 순서

필터는 Dispatcher Servlet이 호출되기전에 호출된다.

인터셉터는 dispatcher와 controller 사이에 있다. 컨트롤러의 실행여부도 제어할수있다, 페이지에 대한 권한을 줄수있고 기능을 쓰게 할지안할지 제어할수있다.

처리된 결과를 받으면 View Resolver 에 넘겨서 뷰 처리.

AOP 와 Interceptor 차이

  • AOP는 JointPoint, PreceedingJointPoint 를 파라미터로 활용해서 특정 객체 동작의 사전, 사후 처리를 활용
  • AOP는 메서드 단위로 전후 처리 ,Interceptor는 컨트롤러 기준으로 전후 처리
  • Interceptor는 필터에서 받은 매개변수를 받을수있다.

HandlerInterceptor 인터페이스

컨트롤러 실행전: preHandle(request, response, handler)
컨트롤러 실행후: postHandle(request, response, handler, modelAndView)
뷰를 실행한 이후: afterCompletion(request, response, handler, exception)

preHandle(request, response, handler)

  • 컨트롤러 객체를 실행하기전에 필요한 기능을 구현할때 사용
  • 리턴타입이 boolean 인데 , false를 리턴하면 컨트롤러를 실행하지않는다
  • 접근권한이 없는 경우, 컨트롤러에 필요한 정보를 생성하는 작업이 가능하다

postHandle(request, response, handler, modalAndView)

  • 컨트롤러 객체가 정상 실행된 후 (화면처리 전) 화면에 필요한 기능들을 구현할때 사용
  • 컨트롤러가 exception이 발생 되면 실행되지 않는다

afterCompletion(request, response, handler,exception)

  • 클라이언트에 뷰를 (화면 처리 후)전송한뒤 실행된다
  • 뷰를 처리하는 시간을 계산, 기록할때 사용하는 메서드
  • 컨트롤러가 exception이 발생되며 예외값 전달 아니면 null

스프링 Security

애플리케이션 보안 기능을 구현할때 사용하느 프레임워크

인증: 애플리케이션에 접근하는 사용자를 특정하는 기능
인가: 특정한 사용자에 대해 정보와 기능의 접근을 제한하는 기능

강화된 보안 기능

  • 세션관리: 세션 라이프사이클 관리
  • CSRF(Cross-site Request Forgery) 방지: 크로스 사이트 요청 변조 공격으로부터 사용자보호
  • 브라우저 보안기능 연계: 브라우저 기능을 악용한 공격에서 사용자 보호

스프링 시큐리티

  • 인증, 인가를 구현하기 위한 다양한 필터 클래스 제공
  • XML 파일에서 데이터베이스 리소스부터 인증,인가 정보 취득가능
  • HTTP basic 인증, HTML 폼등 다양한 인증 방식 지원
  • 인가 정보에 기반한 화면 제어를 위한 JSP 태그 라이브러리 제공
  • 메서드 호출에 대한 접근제어에 AOP 사용가능
  • 시큐리티 공격 방어기능 제공
    Sprin-secuirt-oauth2 라이브러리 제공

스프링 Security 라이브러리 모듈 구성

spring-security-core: 인증 인가 기능을 구현하기 위한 핵심 컴포넌트

spring-security-web: 웹 애플리케이션 보안 기능을 구현하기위하 컴포넌트

spring-securty-config: 각모듈에서 제공하는 컴포넌트 설정을 지원

spring-security-taglibs: 인증 및 인가 정보를 사용하기위한 JSP 태그 라이브러리

spring-security-acl: ACL을 사용해서 애플리케이션의 도메인 객체 인스턴스 보호

스프링 Security 주요 컴포넌트

FilterChainProxy: 전체적인 흐름을 제어하고 , 보안기능과 같은 추가 기능을 필터에게 위임

HTTPfirewall: 방화벽 기능을 추가하기위한 인터페이스 (요청을 차단할때 사용)

SecuirtyFilterChain: FilterChainProxy가 받은 요청을 적용할 보안 필터 목록을 관리하기 위한 인터페이스

Security Filter: 보안 기능을 제공하는 서블릿 필터 클래스

인증필터 : 인증처리 방식에 대한 구현을 제공하는 서블릿 필터


DelegatingFilterProxy: DelegatingFilterProxy 클래스를 정의하여 서블릿 API의 인터페이스 구현

AuthenticationManger: 인증 처리를 수행하기 위한 인터페이스,authenticationProvider에서 처리된 결과를 처리하는 구조

AuthenticationProvider: 인증 처리 기능을 구현하기 위한 인터페이스

코드 추가되는 파일과 수정들

web.xml 에
context-param 에 param-value root-context 와 security-context.xml 파일 추가

스프링 필터 추가

web.xml

스프링 Securit filter 설정

메모리 인증 정보

security-context-mem.xml
스프리 Security Filter 설정과 매핑웹 전체설정

데이터베이스를 통한 인증

security-context-db.xml
데이터베이스에 암호정보가 encrypt 되어있어야 한다

JdbcDaoImpl 개게 생성

폼 로그인 기능 적용

security-context.xml
permitAll() : 모든 사용자 액세스 가능
hasAuthority("Role"): Role 권한가진 사용자만 액세스가능
isAuthenticated(): 인증된 사용자만 액세스 가능
default-target-url: 제일 기본으로 사용할 URL
login-page: 지정한 로그인 페이지
login-processing-url: 로그인페이지 폼에서 전달하는 action 값
username-parameter: 폼으로 전달하는 변수
password-parameter: 폼으로 전달하는 변수


  • 인터셉터와 필터의 차이점 -> 영역측면에서 차이 spring context를 쓸 수 있냐 없냐

  • 인터셉터와 AOP의 차이점 -> 메서드와 컨트롤러간 파라미터가 다름

  • 인터셉터 설정. 특정 요청 종류에 따라

  • 인터셉터 구현하기 위한 인터페이스 세가지 메서드

  • secruity 주요 컴포넌트와 라이브러리들은 어떤 것이 있는지?

  • 프록시와 필터의 연동관계. secruity가 맆터체인프록시, secruity fillter 각각의 역할

  • 필터에서 인증처리하기 위한 인터페이스 authentication manager, provide 역할-> spring secruity 구조를 사용해 설명

  • 로그인 창을 개발자가 제공하는 것으로 바꾸었을 때 설정하는 부분

  • 디비 인증할 때 설정하는 부분 -> authentication manager, provide, jdbcUserService, DataSource, password encoder의 bean 관계. 설정태그에 대한 부분

0개의 댓글