sourcecode

봄 "URL이 정상화되지 않아 요청이 거부되었습니다."어떤 URL이 사용되었는지 어떻게 알 수 있습니까?

codebag 2023. 8. 11. 21:48
반응형

봄 "URL이 정상화되지 않아 요청이 거부되었습니다."어떤 URL이 사용되었는지 어떻게 알 수 있습니까?

생산 과정에서 많은 오류가 발생하고 있습니다.

org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

아마도 이것은 다음과 같은 이유로 발생합니다.//URL에는 있지만 어디서 온 건지 전혀 모르겠어요어떤 URL이 원인인지 어떻게 알 수 있습니까?무슨 일이 일어나고 있는지 모를 때는 고치기가 어렵습니다.

관련 질문이 있다는 것은 알고 있지만, 문제 URL을 진단하는 방법은 다루지 않습니다.엄격한 방화벽을 해제하는 방법만 설명합니다.

HttpFirewall처음에 요청을 확인할 것입니다.FilterChainProxy의 필터를 호출하기 전에도SecurityFilterChain그래서 당신의 최선의 방법은 설정하는 것입니다.Filter앞에 놓인 것FilterChainProxy그리고 이것Filter을 잡는데 사용됩니다.RequestRejectedException세부 정보를 기록합니다.

이 예외를 탐지하는 필터 구현:

public class LogFilter implements Filter{

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
        try {
            chain.doFilter(request, response);
        } catch (Exception e) {
            if( e instanceof RequestRejectedException ) {
                logger.info("Catch RequestRejectedException....");
                logger.info((HttpServletRequest)request).getRequestURI()); //log the request detail such as its URI
            }
            throw e;
        }
    }
}

필터 구성 및 등록

@Bean
public FilterRegistrationBean someFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new LogFilter());
    registration.addUrlPatterns("/*");
    registration.setOrder(RegistrationBean.HIGHEST_PRECEDENCE); //Must has higher precedence than FilterChainProxy
    return registration;
} 

이 글을 댓글로 올리지 못해 죄송합니다만, 저는 아직 그렇게 할 수 없습니다.

다른 로깅 수준과 파일 로깅을 시도해 보셨습니까?지금 집에 없지만 다음 대사를 시도해 보십시오.

logging.level.=ERROR
logging.file=/home/spring.log

로깅 수준으로 DEBUG도 시도해 볼 수 있습니다.

다른 이유는 (조금 촌스럽지만) 모든 것을 교체하려고 노력하는 것입니다.//와 함께/

세 번째 옵션으로 이 스크립트를 찾았습니다. 작동시킬 수 있습니다.

@ExceptionHandler(RequestRejectedException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleRequestRejectedException(final HttpServletRequest request, final RequestRejectedException ex)
{
    if (LOGGER.isLoggable(Level.INFO))
    {
        LOGGER.log(Level.INFO, "Request Rejected", ex);
    }

    LOGGER.log(Level.WARNING, "Rejected request for [" + request.getRequestURL().toString() + "]. Reason: " + ex.getMessage());
    return "errorPage";
}

행운을 빌어요, 당신이 성공하지 못하면 내일 다시 오겠습니다.

문제는 Spring Security를 사용하도록 구성하고 컨트롤러 클래스에서 @CrossOrigin Annotation을 활성화했다는 것입니다. 아래는 방금 구성 방법에 추가한 내용입니다.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // ...
        http.cors(); //Only this
    }
}

참고를 위해 여기를 확인할 수도 있습니다. https://www.baeldung.com/spring-cors

언급URL : https://stackoverflow.com/questions/54489645/spring-the-request-was-rejected-because-the-url-was-not-normalized-how-to-tel

반응형