0

在我的 Spring Boot 应用程序中,我在我的应用程序外部托管文件。通过 addResourceHandler() 方法这样做。

此外,我需要通过检查几个会话属性来验证对这些文件的访问。为此,我添加了一个拦截器。

问题:在拦截时,在拦截器的 preHandle 中,通过代理路由器 apache 设置部署在 LINUX 上时,HttpServletRequest 没有任何会话信息(无会话)。但是,当直接从我的 IDE 在 Windows 上运行时,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 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>

关于我缺少什么的任何标题?

4

1 回答 1

0

在 memcache 配置中发现从会话备份中跳过静态资源的问题

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

这从来没有在我的 httprequest 中设置会话信息

于 2017-02-13T11:32:26.923 回答