https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/web/session/DisableEncodeUrlFilter.html

이 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 가장 첫 번째에 위치한다.

필터가 등록되는 목적은 URL 파라미터에 세션 id가 인코딩되어 로그로 유출되는 것을 방지하기 위함이다.

→ Session Id를 통한 세션 공격 방지.

URL로 간주되지 않는 부분을 포함하지 않도록 설정.

커스텀 SecurityFilterChain을 생성해도 등록되면 비활성은 세션관리 설정을 disable하면 된다.

http
					.sessionManagement((manage) -> manage.disable())
					;
public class DisableEncodeUrlFilter extends **OncePerRequestFilter** {
    public DisableEncodeUrlFilter() {
    }

		// 기존의 response는 session Id를 파라미터 값을 가지게 된다.
		// 다음 필터로 넘길때 response를 DisableEncodeUrlResponseWrapper로 처리한 다음에 넘겨준다.
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        filterChain.doFilter(request, new DisableEncodeUrlResponseWrapper(response));
    }

		// session Id 가 파라미터로 유출 되는 것을 막아줌.
    private static final class DisableEncodeUrlResponseWrapper extends HttpServletResponseWrapper {
        private DisableEncodeUrlResponseWrapper(HttpServletResponse response) {
            super(response);
        }

        public String encodeRedirectURL(String url) {
            return url;
        }

        public String encodeURL(String url) {
            return url;
        }
    }
}

기존 org.apache.catalina.connector.Response 에서 제공하는 URL은 session Id를 인코딩하여 반환한다.

따라서 Security 의 DisableEncodeUrlFilter에서는 session Id를 인코딩 하지 않고 그냥 url 만 반환하도록 한다.