Flamme Dev
  • IntroduceMyself
  • GOAL
    • 2021년 목표
    • 회고록
      • 2020년
  • COMMON
    • 자료구조
      • 시간복잡도
      • 스택/큐
    • 코드리뷰/스터디/세미나
      • Semina
        • Version control -1 (SVN/GIT)
        • Version control - 2 (GIT)
        • PostMan
        • JMeter
      • 스터디
        • 2021년
          • EffectiveKotlin
          • 이펙티브자바
        • 2020년
          • JPA Study
            • Chap1
            • Chap3
            • Chap4
            • Chap5
            • Chap6
            • Chap7
            • Chap8
            • Chap9
            • Chap10 -1
            • Chap10-2
            • Chap10-3
            • Chap12
            • Chap 13. 웹 애플리케이션과 영속성 관리
            • Chap14
      • 코드리뷰
        • Page 1
        • 개발 생각
        • APNs 라이브러리 교체
        • 파일 삭제 분투기
        • 신입 코드리뷰
          • 2020-09-02
          • 2020-09-03
          • 2020-09-10
        • Repository
          • Repositroy(20201124)
          • Repositroy(20201123)
          • Repositroy(20201120)
          • Repositroy(20201119)
          • Repositroy(20201117)
    • 개발 서적 / 동영상 강의
      • 동영상 강의
        • 진행 중
        • 완주한 것
      • 개발 서적
        • 읽은 것
          • 손에 잡히는 10분 SQL
            • 인덱스
            • 정리 본
        • 진행 중
          • 폴리글랏 프로그래밍
          • DDD-START
            • Chapter5 리포지터리의 조회 기능
            • Chapter4 리포지터리와 모델 구현
            • Chapter3 애그리거트
            • Chapter2 아키텍쳐 개요
            • Chapter1 도메인 모델의 시작
  • INFO
    • 유스콘 준비
    • intellij
      • Command line is too long.
    • 프로그래밍의 종류
      • Async Await
      • Reactive Programming
      • Imperative Programming
      • Functional Programming
        • Naver D2 함수형 프로그래밍 강의
      • Object Oriented Programing
        • 객체지향에 대해서 알아보는 영상
      • ProcedureOriented Programming
      • RX(ReactiveX)
      • OOP VS FP
      • Declarative Programming
    • Language
      • Kotlin
        • 박재성님 강의
        • Kotlin Spring CGLIB Error
        • Kotlin의 사용
        • coroutine
        • Kotlin JVM
      • JavaScript
      • JAVA
        • DefaultNonnull
        • effective78
        • Exception
        • JsonUnWrappers
        • 명명짓기
        • @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
        • Enc Key
        • ServiceLoader
        • Annotation
        • JVM(Java Virtual Machine)
        • Java8
          • Functional 사용
          • Optional
          • Invalid Key size
        • Java13
          • Text Block
        • Basic
          • Generic
          • JVM
          • Interface, Implements
    • Framework
      • NodeJs
      • Xamarin
      • Vert.x
        • vert.x in action
        • eventbus
      • blockedthreadchecker
      • Why.. not root run..
      • Spring
        • Spring Test
        • Kotlin
        • ControllerAdvice 정리
        • JsonAnnotation
        • Spring Data R2DBC
        • SpringWebFlux
          • login
          • SpringWebFlux란?
        • JPA
          • QueryDSL 객체 주소값 확인할 것
          • SpringData-JPA에서 Save, SaveAll
          • @CompositeKey에 ManyToOne JoinColumn이 있을 경우
          • QueryDSL N+1 문제(@OneToOne)
          • QueryDSL설정
          • CreationTimestamp
          • Enum(@enumerated vs @convert)
        • SpringSecurity
          • aopAlliance
          • csrf 방어
          • antMatcher vs mvcMatcher
          • SpringSecurity를 왜 써야할까?
          • CoreSpringSecurity
            • AuthenticationProvider
            • AuthenticationManager
            • Authentication Flow
            • SecurityContextPersistenceFilter
            • SecurityContextHolder, SecurityContext
            • Authentication
            • 필터 초기화와 다중 보안 설정
            • DelegatingProxyChain, FilterChainProxy
            • 사이트 간 요청 위조 - CSRF, CsrfFilter
            • 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter
            • 인가 API - 권한 설정 및 표현식
            • SessionManagementFilter, ConcurrentSessionFilter
            • 동시 세션 제어 / 세션고정보호/ 세션 정책
            • AnonymousAuthenticationFilter
            • RememberMeAutheticationFilter
            • Logout,LogoutFilter
            • UsernamePasswordAuthenticationFilter
            • Form인증
            • 인증 API - 사용자 정의 보안 기능 구현
            • 인증 API - 스프링 시큐리티 의존성 추가
        • SpringMVC
          • Spring Bean Q&A
          • HttpServletRequest
          • @ControllerAdvice
          • Service와 ServiceImpl은 꼭 있어야할까?
          • SpringMVC-1
          • SpringMVC - validator와 Errors
          • SpringMVC - DispatcherServlet의 URL
          • Spring MVC - 기본설정(2) 및 HandlerInterceptor
          • SpringMVC-3
          • Spring MVC - ViewResolver
          • Spring MVC - XML/JSON
          • Spring MVC - Field Injection & Constructor Injection
        • SpringEtc
          • Transactional
          • @Atowired NullPointer
          • CircleReference
          • Mybatis
            • IBatis - sql에 Map
            • 1:1 Mapping시 Null
            • auto_Increment, selectKey
          • @Transactional
          • JacksonAnnotation
        • SpringAOP
        • SpringDI
    • Server
      • PM2
      • Tomcat
        • jks
        • Virtual Host(Port)
    • OS
      • Window
        • Active directory
      • IOS
      • Linux
        • samba/keroberos
        • Linux
          • unlimit / socket backLog
          • nohup
          • ; , & , &&, {}
          • 쉘
          • rc.local
          • ps aux | grep 프로세스이름
          • Vim
          • Su, Sudo
          • File Directory
        • IdConfig
        • 유용한 커맨드
        • 리눅스 대소문자
        • 소프트링크와 하드링크의 차이
        • ln -Tfs
        • //와 / 의 차이
        • Linux(202003)
          • rm
          • diff
          • cp
          • mv
          • tar 압축 시 어떻게 심볼릭 링크도 같이 압축할까?
          • tar 명령어
          • ln -s 심볼릭 링크
    • Network
      • API Architectural Styles
      • 포트 확인
      • HeartBeat Protocol
      • SSO(Single Sign On)
      • Cookie and Session
      • Tcp HandShake
      • WireShark
        • WireShark 옵션
        • WireShark 패킷분석
    • DataBase
      • DB락에 대해서 알아보기
      • Redis
      • MYSQL
        • Mysql TimeOut 설정
        • MysqlLog
        • SlowQuery Analyzing
        • PushNotification Stress Test
      • MSSQL
      • 데이터베이스 식별자 선택 전략
    • ETC
      • 이름 짓기
      • FFProbe
      • Talk
      • Untitled
Powered by GitBook
On this page

Was this helpful?

  1. INFO
  2. Framework
  3. Spring
  4. SpringMVC

Spring MVC - 기본설정(2) 및 HandlerInterceptor

뷰 전용 컨트롤러 설정

- 단순경로 요청을 위함.

defaultServlet <mvc: view-controller path="/경로" view-name="경로/">

디폴트 서블릿 설정과 동장박식

web-xml에서 DispatcherServelet에 대한 경로 매핑을 '/'로 하면 CSS/JS/HTML/JSP 등에 대한 요청이 DispatcherServlet으로 전달된다.

이 요청은 was가 기본으로 제공하는 디폴트 서블릿이 처리하게 되어 있기 때문에 디폴트 서블렛이 처리를 한다.

그러므로 처리를 할 때 <mvc:default-servlet-handler>를 추가시키면 된다.

default-servlet-handler는

- 요청 경로와 일치하는 컨트롤러를 찾는다.

- 컨트롤러가 존재하지 않으면, 디폴트 서블릿 핸들러에 전달한다.

- 디폴트 서블릿 핸들러는 WAS의 디폴트 서블릿에 처리를 위임한다.

- 디폴트 서블릿읭 처리 결과를 응답으로 전송한다.

정적 자원 설정하기

CSS, JS, 이미지 등의 자원은 거의 변하지 않기 때문에, 웹 브라우저에 캐시를 하면 네트워크 사용량, 서버 사용량, 웹 브라우저의 반응 속도 등을 개선할 수 있다.

이렇게 반응 속도를 개선하기 위해서 사용하는 것이 <mvc:resources> 태그이다.

<mvc:resources mapping="/images/**" location="/img/, /WEB-INF/resources/" cache-period="60"/>

HandlerInterceptor를 이용한 인터셉터 구현

요청 경로마다 접근 제어를 다르게 해야 한닥거나 사용자가 특정 URL을 요청할 때마다 접근 내역을 기록하고 싶다면 매 클래스마다 중복된 코드를 쓸 수 밖에 없다. 하지만 이 중복되는 코드를 없애주기 위한 방법이 바로 AOP이지만 AOP는 범용적인 방법이다. 그래서 스프링MVC에서는 여러 컨트롤러에 공통으로 적용되는 기능을 구현하는 방법인 HandlerInterceptor를 제공하고 있으며, 이를 사용하면 스프링 MVC에 맞게 공통 기능을 다수의 URL에 적용 할 수 있게 된다.

HandlerInterceptor는 공통기능으로 컨트롤러 실행전, 컨트롤러 실행 후, 뷰를 실행한 이후로 기능을 넣을 수 있다.

<mvc:interceptors>
	<bean id="measuringInterceptor" class="인터셉터클래스 이름"/>
</mvc:interceptors>

기본적인 설정.

<mvc:interceptors>
	<mvc:interceptor>
    	<mvc:mapping path="/event/**"/>
        <mvc:mapping path="/folders/**"/>
	<bean id="measuringInterceptor" class="인터셉터클래스 이름"/>
    </mvc:interceptor>
</mvc:interceptors>

이렇게 요청경로 패턴을 따로 지정 할 수 있다.

핸들러 인터셉터는 실행 시간 측정, 로그인 한 사용자만 접근 허용, 여러 뷰에서 함께 사용될 모델 설정

나는 jwtToken, cookie, session로그인 정보를 전부 HandlerInterceptor를 extends해줘서 구현했다.

<mvc:interceptors>
	<mvc:interceptor>
    	<mvc:mapping path="/acl/**"/>
        <bean class="kr.or.flamme.auth"/>
    </mvc:interceptor>
    <bean class="Measure"/>
    <mvc:interceptor>
          <mvc:mapping path="1"/>
          <mvc:mapping path="2"/>
          <mvc:mapping path="3"/>
          <bean class="test1"/>
    </mvc:interceptor >
</mvc:interceptors>

- 많은 인터셉터를 넣어 차례대로 진행하도록 만들었다.

또한 제외하고 싶으면 <mvc:exclude-mapping paht="명확한경로"/>를 써주면 된다.좋아요1공유하기통계글 요소

PreviousSpringMVC - DispatcherServlet의 URLNextSpringMVC-3

Last updated 4 years ago

Was this helpful?