일반적인 브라우징에서는 딱히 문제가 없는데 로그인이후에 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"/>