2017-02-07 9 views
0

스프링 부트 응용 프로그램에서 내 응용 프로그램의 외부 파일을 호스팅하고 있습니다. addResourceHandler() 메소드에 의해 그렇게했다.스프링 부트 : 정적으로 호스팅 된 리소스 파일에 대한 요청을 가로 채기

또한 세션 속성 몇 개를 확인하여 이러한 파일에 대한 액세스를 확인해야합니다. 이를 위해 인터셉터를 추가했습니다.

문제는 : 프록시 라우터 아파치 설정을 통해 리눅스에 배포 할 때 차단하지만, 인터셉터의 preHandle에서 HttpServletRequest의 모든 세션 정보 (NO 세션)가 없습니다. 그러나, 내 IDE에서 직접 창을 실행할 때, HttpServletRequest는 올바른 세션을 가지고 있습니다.

아래는
@Configuration 
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class) 
public class ULCMvcConfigurerAdapter extends WebMvcConfigurerAdapter { 

    @Autowired 
    private ThumbnailViewRequestInterceptor thumbnailViewRequestInterceptor; 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/content/thumbnails/**").addResourceLocations("file:/app/content/files/).setCachePeriod(60*60*24); 
    } 

    @Bean 
    public MappedInterceptor createThumbnailInterceptor() { 
     return new MappedInterceptor("/content/thumbnails/**", "/content/thumbnails/public/**", thumbnailViewRequestInterceptor); 
    } 
} 


@Component 
public class ThumbnailViewRequestInterceptor extends HandlerInterceptorAdapter { 

    @Autowired 
    private UserService userService; 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception arg3) throws Exception { 
    } 

    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception { 
    } 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { 
     final boolean allowAccess = someOperationOnRequestObject(request.getSession(false), request.getRequestURL()); 
     return allowAccess; 
    } 
} 

내 아파치 conf의 설정됩니다 :

<VirtualHost *:80> 

     Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 

     <Proxy "balancer://cluster"> 
       BalancerMember http://10.76.2.72:8081/ keepalive=on retry=20 route=1 
       BalancerMember http://10.76.2.72:8082/ keepalive=on retry=20 route=2 
      ProxySet stickysession=ROUTEID 
     </Proxy> 
     <Location /balancer-manager> 
       SetHandler balancer-manager 
     </Location> 
     ProxyPass /balancer-manager ! 
     ProxyPass/"balancer://cluster/" maxattempts=6 timeout=60 
     ProxyPassReverse/"balancer://cluster" 

</VirtualHost> 

모든 헤더 무엇에 내가 놓치고 아래

코드인가?

답변

0

이 결코 내 HttpRequest에에서 세션 정보를 설정하지 않은 정적 리소스가

**MemcachedBackupSessionManager manager = new MemcachedBackupSessionManager(); 
manager.setRequestUriIgnorePattern(".*\\.(ico|png|gif|jpg|css|js)$");** 

세션 백업에서 제외되고 있었다 Memcache의 구성에서 문제를 찾을 수