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

좋은 웹페이지 즐겨찾기