Wicket 6.x https与其他主机

时间:2015-05-21 13:59:08

标签: wicket wicket-6

我的网页上有一个用户可以登录的区域。这个区域

  

www.host.com/mypage/myarea

应该在https下。

问题是我的https正在另一台主机上运行:

  

www.something-foo.host.com/mypage/myarea

。 (负载均衡器的东西......我不知道为什么)

我的尝试是用@RequireHttps注释页面,而不是重写页面的网址。

但是如何以及在哪里?有人请一个例子吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您真的想要使用Wicket,那么您最好的选择就是编写IRequestMapperDelegate的实现,并在WicketApplication的onInit()过程中设置它们。

为了让你知道如何做到这一点我写了一个强奸Wicket的HttpsMapper的例子:

    setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig(8080, 8443)) {
        private final static String SUBDOMAIN = "www.something-foo.";

        @Override
        protected Scheme getSchemeOf(Request request) {
            HttpServletRequest req = (HttpServletRequest) ((WebRequest) request).getContainerRequest();
            // well that's basically cheating and not so nice... but we're not allowed to overwrite mapRequest()
            // but that means that every request that doesn't start with the subdomain will be treated as HTTP aka
            // insecure.
            if (req.getServerName().startsWith(SUBDOMAIN) == false) {
                return Scheme.HTTP;
            }

            return super.getSchemeOf(request);
        }

        @Override
        protected String createRedirectUrl(IRequestHandler handler, Request request, Scheme scheme) {
            // stolen from super implementation
            HttpServletRequest req = (HttpServletRequest) ((WebRequest) request).getContainerRequest();
            String url = scheme.urlName() + "://";
            // except the part where we insert the subdomain
            url += SUBDOMAIN;
            url += req.getServerName();
            if (!scheme.usesStandardPort(getConfig())) {
                url += ":" + scheme.getPort(getConfig());
            }
            url += req.getRequestURI();
            if (req.getQueryString() != null) {
                url += "?" + req.getQueryString();
            }
            return url;

        }
    });

根据您的问题,我无法确定这是否是一个很好的解决方案......这实际上取决于Wicket上有多少框架正在运行。既然你没有提到任何我没有提及的事情。