2017-02-07 2 views
0

Из моего приложения загрузки Spring я размещаю файлы, внешние по отношению к моему приложению. Сделал это методом addResourceHandler().Spring boot: перехват запросов для статически размещенных файлов ресурсов

Кроме того, мне нужно проверить доступ к этим файлам, проверив пару атрибутов сеанса. Для этого я добавил перехватчик.

Проблема: В то время как перехватывать, в preHandle перехватчика, то HttpServletRequest не имеет какой-либо информации сеанса (без сеанса) при развертывании на LINUX через настройки апача прокси маршрутизатора. Однако при запуске в Windows непосредственно из моей 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; 
    } 
} 

Ниже мои настройки Apache конф:

<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

Нашел проблему в конфигурации, где кэша памяти статические ресурсы были пропущены из резервной копии сеанса

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

Это никогда не было установки информации сеанса в моей HTTPRequest

Смежные вопросы