ContextFilter 필터
4008 단어 ofbiz
구성의 예
ContextFilter
ContextFilter
org.ofbiz.webapp.control.ContextFilter
disableContextSecurity
N
allowedPaths
/error:/control:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images:/static:/js
errorCode
403
redirectPath
/control/main
1.allowedPaths 매개변수
이 매개 변수의 초기화는 다음과 같다.
먼저 볼 수 있는 것은 매번 새로운 리퀘스트가 올 때마다 allowed Path가 해석된다는 것이다. 아마도 이곳은 최적화할 수 있을 것이다
if (request.getAttribute(ContextFilter.FORWARDED_FROM_SERVLET) == null) {
// Debug.logInfo("In ContextFilter.doFilter, FORWARDED_FROM_SERVLET is NOT set", module);
String allowedPath = config.getInitParameter("allowedPaths");
String redirectPath = config.getInitParameter("redirectPath");
String errorCode = config.getInitParameter("errorCode");
List allowList = StringUtil.split(allowedPath, ":");
allowList.add("/"); // No path is allowed.
allowList.add(""); // No path is allowed.
아래쪽 코드에 이런 부분이 있어요.
if (!allowList.contains(requestPath) && !allowList.contains(requestInfo) && !allowList.contains(httpRequest.getServletPath())) {
리퀘스트의 자원 이름이 allowedPath에 있지 않다는 거예요.
그럼 이어서.
String filterMessage = "[Filtered request]: " + contextUri;
if (redirectPath == null) {
int error = 404;
if (UtilValidate.isNotEmpty(errorCode)) {
try {
error = Integer.parseInt(errorCode);
} catch (NumberFormatException nfe) {
Debug.logWarning(nfe, "Error code specified would not parse to Integer : " + errorCode, module);
}
}
filterMessage = filterMessage + " (" + error + ")";
wrapper.sendError(error, contextUri);
} else {
filterMessage = filterMessage + " (" + redirectPath + ")";
if (!redirectPath.toLowerCase().startsWith("http")) {
redirectPath = httpRequest.getContextPath() + redirectPath;
}
wrapper.sendRedirect(redirectPath);
}
Debug.logWarning(filterMessage, module);
return;
}
wrapper.sendRedirect(redirectPath);이 말은 너를 다른 곳으로 재정비할 것이다.
redirectPath는 저희가 위에서 설정한 거예요.
redirectPath
/control/main
일반적으로/control/main으로 설정됩니다.
만약 우리가/control을 allowed Paths에서 삭제하면 요청이/control/main으로 계속 바뀌는 것을 발견할 수 있습니다.마지막으로...
본문 전재:
http://liyixing.tk:20080/articles/2015/04/14/1428998097305.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EntityListIterator는tranction에 있어야 합니다.다른 곳에서는 이 문제를 만난 적이 없어서 다선정에서 만났다.그래서 나는tranction을 넣었는데 왜 다른 곳은 안 되고 한 현만 열면 반드시 사무에 포함될 수 있는 원인, 주선의 다른 곳에서 사물을 열어야 하는지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.