[SPRING] 스프링 보안 - 캐시 제어를 피할 방법이 없습니다.
SPRING스프링 보안 - 캐시 제어를 피할 방법이 없습니다.
나는 응용 프로그램을 가지고 있고 스프링의 컨트롤러 매핑을 사용하여 내 사용자에게 이미지를로드합니다. (InputStream, 응답 등).
필자의 컨트롤러에서는 헤더를 캐시 제어, 파일 기반으로 설정했습니다. 그러나 모든 요청에는 항상 no-cache 및 Cache-Control : "max-age = 0"이라는 프라그 마가 있습니다. 이것은 내 응답 설정을 대체합니다.
이 문제를 해결하기 위해 모든 노력을했지만 아무것도 작동하지 않습니다.
나는 이미 모든 페이지를 읽고 그것에 대해 발견 한 모든 것을 시도한다. http://docs.spring.io/autorepo/docs/spring-security/3.2.0.CI-SNAPSHOT/reference/html/headers.html
내 spring security.xml에는 다음과 같은 것들이있다.
<security:headers disabled="true"/>
누구든지이 문제를 해결할 좋은 생각이 있습니까?
컨트롤러를 통해로드해야하는 이미지를로드하려면 정적을 직접 호출하지 마십시오.
해결법
-
==============================
1.Cache-Control 헤더는 HttpServletResponse에서 오버라이드하여 액션 단위로 제어 할 수 있습니다.
Cache-Control 헤더는 HttpServletResponse에서 오버라이드하여 액션 단위로 제어 할 수 있습니다.
@RequestMapping(value = "/foo", method = RequestMethod.GET) public String someAction(HttpServletResponse response) { response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); // ... }
스프링 시큐러티 구성을 조작 할 필요가 없습니다.
http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-cache-control을 참조하십시오.
-
==============================
2.Java 기반 구성을 사용하는 경우 캐시 제어 헤더를 다음과 같이 비활성화 할 수 있습니다.
Java 기반 구성을 사용하는 경우 캐시 제어 헤더를 다음과 같이 비활성화 할 수 있습니다.
@Configuration @EnableWebMvcSecurity class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http.headers().cacheControl().disable(); } }
그러면 CacheControlHeadersWriter가 제거되고 Spring은 더 이상 캐시 제어 헤더를 작성하지 않습니다.
-
==============================
3.당신이 링크 한 Per Spring Security 레퍼런스 (3.2.0)
당신이 링크 한 Per Spring Security 레퍼런스 (3.2.0)
단순히 헤더를 추가하면 모든 하위 요소 (예 : 캐시 제어, xxs ...)가 켜집니다. 헤더를 전혀 사용하지 않거나 사용할 하위 요소를 명시 적으로 지정하십시오.
BTW, 나는 장애인 (3.2.0에 대한) 헤더의 속성이라고 생각하지 않습니다. 버전 4.0을 사용하는 경우 disabled-defaults와 같이 disabled 속성이 있습니다.
-
==============================
4.아하의 대답에 추가. 또한 Pragma 헤더를 일부 가비지로 대체해야합니다.
아하의 대답에 추가. 또한 Pragma 헤더를 일부 가비지로 대체해야합니다.
@RequestMapping(value = "/foo", method = RequestMethod.GET) public String someAction(HttpServletResponse response) { response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); response.setHeader("Pragma", ""); // ... }
Expires 헤더는 여전히 응답에 표시되지만 대부분의 브라우저에서 Cache-Control 헤더에 의해 무시됩니다.
-
==============================
5.언젠가는 -하지만 같은 문제에 대해 연구하는 동안, 나는이 게시물을 발견하고 이것은 또는 나 -
언젠가는 -하지만 같은 문제에 대해 연구하는 동안, 나는이 게시물을 발견하고 이것은 또는 나 -
봄 보안에서 특정 URL에 대한 캐싱 사용 중지
위에서 언급 한 솔루션의 장점은 고유 한 클래스를 사용하여 각 헤더를 구체적으로 사용할 수 있도록하고 antmatcher를 사용하여 특정 요청 경로를 각 헤더에 정렬하는 것입니다. 필자는 캐시 만료 세트가있는 정적 리소스와 캐시가없는 모든 JSP 용으로 별도의 캐시 참조를 사용했습니다. ant matcher이기 때문에, 컨트롤러 uri는 같은 접근법을 사용하여 일치시킬 수 있습니다.
from https://stackoverflow.com/questions/31412918/spring-security-no-way-to-avoid-cache-control by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Boot - 배포시 백그라운드 스레드를 시작하는 가장 좋은 방법 (0) | 2019.04.19 |
---|---|
[SPRING] 스프링 보안 : BadCredentialsException 대신 LockedException이 발생합니다. 이유는 무엇입니까? (0) | 2019.04.19 |
[SPRING] @Autowired 객체가 null 값을 얻음 (0) | 2019.04.19 |
[SPRING] 자바 스크립트 내에서 봄 MVC 컨트롤러 모델 키 값을 얻는 방법? (0) | 2019.04.19 |
[SPRING] 이미 만들어진 개체에 DaoAuthenticationConfigurer를 적용 할 수 없습니다. (0) | 2019.04.19 |