spring 화면 음악 에 직접 주입 되 는 Http ServletRequst 안전 합 니까?
2799 단어 httpservletrequestspringmvc
HttpServletRequest 대상 은 클 라 이언 트 의 요청 을 대표 합 니 다.클 라 이언 트 가 HTTP 프로 토 콜 을 통 해 서버 에 접근 할 때 HTTP 요청 헤더 의 모든 정 보 는 이 대상 에 봉 인 됩 니 다.이 대상 이 제공 하 는 방법 을 통 해 클 라 이언 트 가 요청 한 모든 정 보 를 얻 을 수 있 습 니 다.
머리말
본 고 는 주로 spring mvc 가 Http ServletRequst 안전 에 직접 주입 하 는 것 과 관련 된 내용 을 소개 하 는데 매우 간단 해 보 이 는 문제 입 니 다.이 를 통 해 다음 spring 의 소스 코드 처 리 를 추적 합 니 다.
springMVC 를 쓰 는 Control 에는 request 대상 을 가 져 와 서 뭔 가 를 해 야 할 코드 가 많 습 니 다.
예:
@Controller
@RequestMapping(value = "/user")
public class LoanActionPage extends AbstractAction {
@RequestMapping(value = "/page/active")
public String loanAaccountActivePage(HttpServletRequest request) {
// get request to dosomething
String pathInfo = request.getPathInfo();
return "active";
}
}
control 을 쓸 때마다 request 를 매개 변수 로 전달 해 야 하 는 것 같 아서 지루 합 니 다.사실 control 에서 request 대상 을 정의 하고 주입 한 다음 언제든지 사용 할 수 있 습 니 다.
예:
public class AbstractAction {
@Autowired
protected HttpServletRequest request;
... ...
그리고 control 에서 직접 사용:
@Controller
@RequestMapping(value = "/user")
public class LoanActionPage extends AbstractAction {
@RequestMapping(value = "/page/active")
public String loanAaccountActivePage() {
// get request to dosomething
String pathInfo = request.getPathInfo();
return "active";
}
}
그러면 문제 가 생 겼 습 니 다.sevlet 은 다 중 스 레 드 입 니 다.매번 요청 한 request 는 새로운 대상 입 니 다.이렇게 직접 인용 을 공유 하면 스 레 드 가 안전 하지 않 습 니까?편리 합 니 다.문제 도 왔 습 니 다.server.lt 는 다 중 스 레 드 입 니 다.request 를 공유 하면 안전 문제 가 있 을 수 있 습 니까?spring 의 코드 를 분석 하 십시오.
1.주입 한 request 는 어디에서 옵 니까?
주입 인 것 으로 밝 혀 졌 습 니 다.사실은 WebapplicationContextUtils 에 RequestObject Factory 를 통 해 값 을 가 져 와 추적 합 니 다.
Request ContextHolder 의 값 을 되 돌려 줍 니 다.Request ContextHolder 추적
매번 되 돌아 오 는 것 은 RequestAttributes 의 실현 클래스 인 ServletWebRequest(ServletRequestAttributes)의 request 입 니 다.RequestAttributes 는 threadLocal 에 속 하기 때문에 주 입 된 request 도 라인 이 안전 합 니 다.
2,spring 은 언제 request 대상 을 설정 합 니까?
HttpServlet 실현 클래스
FrameworkServlet-> service()->processRequst()
요청 할 때마다 최신 request,값 을 설정 합 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Tool Suite (STS) 설치, 일본어 및 Gradle 플러그인 추가 단계Spring 애플리케이션 개발을 위한 통합 개발 환경으로 Spring Tool Suite(STS)를 설치하는 절차를 설명합니다. 필요에 따라 일본어화와 Gradle 플러그인을 추가하는 절차도 이용하십시오. 설치 대상...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.