Spring - 차단기, 문자 인 코딩 필터
6658 단어 Spring
1.1. 연습 목표
홈 페이지 에 표 시 된 '사용자 이름' 위치 에 하이퍼링크 를 추가 하고 클릭 하면 '개인 센터' 에 들 어 갑 니 다.
/user/info.do
경 로 를 통 해 '개인 정보' 페이지 를 표시 할 수 있 으 며, 이 페이지 는 로그 인 후에 야 접근 할 수 있 습 니 다.1.2. 문제 분석
한 항목 에서 대부분의 기능 은 로그 인 후에 사용 할 수 있 습 니 다. 그러나 이러한 기능 의 처리 에서 모두 실행 해 야 할 수도 있 습 니 다.
// Session username
if (session.getAttribute("username") == null) {
// , ,
return "redirect:login.do";
}
그리고 상기 코드 를 대량으로 복사 하고 붙 이 는 방법 은 분명 바람 직 하지 않다!
1.3. 해결 방안
차단기 (Interceptor) 는 SpringMVC 의 구성 요소 입 니 다.
DispatcherServlet
이후, 각각 Controller
이전에 실행 되 는 구성 요소 입 니 다. 또한 실행 할 때 차단 이나 실행 을 선택 할 수 있 으 면 일부 요청 이 처리 되 거나 처리 되 지 않 을 수 있 습 니 다!그리고 차단 기 는 각각 Controller
요청 을 처리 한 후에 도 실 행 될 수 있다.차단기 와 같은 특징 을 바탕 으로 항목 에 '로그 인 차단기' 를 추가 하여 로그 인 을 요구 하 는 요청 이 모두 '로그 인 차단기' 를 거 쳐 판단 할 수 있 으 며, '로그 인 차단기' 에 서 는 세 션 이 효과 가 있 는 지, 효과 가 있 으 면 놓 고, 효과 적 인 세 션 이 없 으 면 직접 차단 하고 로그 인 페이지 로 재 설정 할 수 있 습 니 다.
1.4. 사용 방식
1.4.1. 차단기 만 들 기
모든 사용자 정의 차단 기 는
HandlerInterceptor
인 터 페 이 스 를 실현 해 야 하기 때문에 프로젝트 에 cn.huang.spring.interceptor.LoginInterceptor
를 만 들 고 실현 HandlerInterceptor
:public class LoginInterceptor
implements HandlerInterceptor {
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
System.out.println("LoginInterceptor.preHandle()");
return false;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("LoginInterceptor.postHandle()");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("LoginInterceptor.afterCompletion()");
}
}
1.4.2. 차단기 설정
springmvc.xml
에 차단기 설정 추가:
1.4.3. 실행 효과
상기 차단 경 로 를 방문 하려 고 시도 할 때 차단기 의
preHandle()
방법 이 실행 되 고 인터페이스 에 공백 이 표시 되 며 차단기 경로 가 정상적으로 접근 할 수 있 으 며 차단기 의 어떤 방법 도 실행 되 지 않 았 습 니 다.1.4.4. 로그 인 차단 보완
컨트롤 러 에서 로그 인 에 성공 하면 Session 에 사용자 이름 을 넣 고 저장 할 때 사용 하 는 이름 은
username
이 므 로 로그 인 여 부 를 판단 하 는 것 은 Session 이 username
라 는 값 인지 확인 하 는 것 입 니 다. 값 이 존재 하 는 경우 로그 인 했 고 값 이 존재 하지 않 으 면 로그 인 하지 않 았 기 때문에 차단기 preHandle()
방법 에서:public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
System.out.println("LoginInterceptor.preHandle()");
// Session
HttpSession session
= request.getSession();
// session
if (session.getAttribute("username") == null) {
// , :
response.sendRedirect("../user/login.do");
//
return false;
} else {
// , : ,
return true;
}
}
1.4.5. 차단기 의 더 많은 설정
차단 기 를 설정 할 때
를 사용 하면 어떤 경 로 를 차단 할 수 있 는 지 설정 할 수 있 습 니 다. 같은 차단기 설정 에 여러 개의 노드 가 있 을 수 있 습 니 다.차단 경 로 를 설정 할 때
*
를 마스크 로 사용 할 수 있 습 니 다. 예 를 들 어:
상기 설정 은 차단
/user
아래 의 모든 경 로 를 표시 합 니 다. 예 를 들 어 /user/login.do
, /user/reg.do
, /user/handler_login.do
, /user/handler_reg.do
, /user/inf.do
등 입 니 다.1 개의 별표
*
를 사용 하면 1 층 경로 만 연결 할 수 있 습 니 다. 즉, 상기 설정 은 /user/info/change.do
과 같은 경로 에 작용 하지 않 습 니 다!경 로 를 무시 하 는 등급 이 필요 하 다 면 2 개의 별표 *
를 사용 해 야 합 니 다. 즉, 설정 은:
상기 설정 을 사용 하면 예 를 들 어
/user/login.do
, /user/info/change.do
, /user/info/change/password.do
등에 사용 할 수 있 습 니 다.마스크 에 사용 한 후 차단 범위 가 너무 클 수 있 으 므 로
노드 를 사용 하여 예 외 를 설정 할 수 있 습 니 다.
이러한 예 외 는 일반적으로 화이트 리스트, 즉 차단기 가 이러한 경로 에 대한 요 구 를 전혀 받 아들 이지 않 는 다 는 것 으로 이해 할 수 있다.
메모: 이상 설정 은 차단 경 로 를 설정 하고 예 외 를 설정 해 야 합 니 다. 마지막 으로 차단 기 류 를 설정 해 야 합 니 다.
2. 문자 인 코딩 필터
SpringMVC 프레임 워 크 를 사용 할 때 기본 값 은 중국 어 를 지원 하지 않 습 니 다. 중국 어 를 지원 하기 위해 서 는
request.setCharacterEncoding("utf-8")
와 같은 문법 으로 사용 할 문자 인 코딩 을 지정 해 야 합 니 다!이 임 무 는 컨트롤 러
Controller
에서 수행 할 수 없습니다. 지정 한 인 코딩 은 Servlet
또는 그 전에 실행 해 야 하기 때 문 입 니 다. Servlet
까지 실행 되 었 을 때 이미 어 지 러 워 졌 고 컨트롤 러 에서 다시 조정 하면 이미 늦 었 습 니 다!스프링 MVC 차단 기 를 통 해 인 코딩 조정 이 불가능 하 다 는 뜻 이다!솔 루 션 은 SpringMVC 프레임 워 크 에서 자체 적 으로 가 져 온
CharacterEncodingFilter
클래스 를 사용 합 니 다. 이 클래스 는 하나의 필터 클래스 로 모든 Servlet
이전에 실행 되 기 때문에 필 터 를 통 해 인 코딩 을 지정 한 후 모든 Servlet
및 후속 절차 에 적 용 됩 니 다!이 클래스 는 사용 할 인 코딩 을 명확 하 게 지정 하지 않 았 기 때문에 설정 할 때 사용 할 인 코딩 을 초기 화해 야 합 니 다!
구체 적 인 설정 은
web.xml
에 추 가 됩 니 다.
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.