개발환경

spring mvc favicon 에러..

toogari 2019. 11. 13. 14:11

일반적인 브라우징에서는 딱히 문제가 없는데 로그인이후에 favicon 파일로 인해 여러 가지 문제가 발생했습니다.

 

구글링해보면 여러가지 방법이 제안되어 있습니다.

 

1. Controller에서 /favicon.ico을 처리하는 메소드에 리턴값이 없게 합니다.

    @GetMapping("favicon.ico")
    @ResponseBody
    public void returnNoFavicon() {
    }

2.  Configuration에 custom 하게 favicon.ico 위치를 직접 처리합니다.

 

    @Bean
    public SimpleUrlHandlerMapping customFaviconHandlerMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setOrder(Integer.MIN_VALUE);
        mapping.setUrlMap(Collections.singletonMap(
                "/favicon.ico", faviconRequestHandler()));
        return mapping;
    }

    @Bean
    protected ResourceHttpRequestHandler faviconRequestHandler() {
        ResourceHttpRequestHandler requestHandler
                = new ResourceHttpRequestHandler();
        ClassPathResource classPathResource
                = new ClassPathResource("images");
        List<Resource> locations = Arrays.asList(classPathResource);
        requestHandler.setLocations(locations);
        return requestHandler;
    }

 

 

하지만 위의 방식으로 문제를 해결하지 못했습니다.

1. 로그인하면 favicon.ico 파일이 덩그러니 보이는 화면이 보입니다. 다시 url에서 favicon.ico 을 삭제하고 다시 들어가면 문제가 없어지기는 합니다. 하지만 사용자에게 url을 변경해서 다시 들어와 달라고 하는거는 너무 불친절하지요.

2. 로그인하면 favicon.ico 파일을 찾을 수 없어 resource 가 없다는 에러가 발생합니다.

 

 

새로운 방식으로 문제를 해결한 듯 싶습니다. (추후 검증이 필요하기는 합니다.)

 

메인 HTML에 직접 icon 관련 태그를 설정합니다.

<link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/resources/static/images/favicon.ico">

 

그리고 위에 언급된 처리 방식은 삭제 합니다. 그러니까 icon 태그를 직접 설정한 것만 남기로 favicon 관련 설정은 삭제 합니다.  테스트해보니 딱히 문제가 없습니다..

 

 

위 해결방법도 문제를 해결하지 못했습니다. !!!

 

spring boot 에 security와 관련있는 문제였습니다.

spirngspring-security.xml 에 아래와 같이 설정하면 됩니다.

<sec:intercept-url pattern="/favicon.ico" access="ROLE_ANONYMOUS"/>