Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block

	@Override
	protected IRequestCycleProcessor newRequestCycleProcessor() {
		return new WebRequestCycleProcessor() {
			@Override
			protected IRequestCodingStrategy newRequestCodingStrategy() {
				return new WebRequestCodingStrategy() {
                                        @Override
					protected void doPostEncode(
							PrependingStringBuffer prepender,
							final RequestCycle requestCycle,
							final IRequestTarget requestTarget) {
						if (requestTarget != null) {
							WebRequest webRequest = (WebRequest) requestCycle
									.getRequest();

							HttpServletRequest httpServletRequest = webRequest
									.getHttpServletRequest();

							Class targetClass = null;

							if (requestTarget instanceof IPageRequestTarget) {
								targetClass = ((IPageRequestTarget) requestTarget)
										.getPage().getClass();
							} else if (requestTarget instanceof IBookmarkablePageRequestTarget) {
								targetClass = ((IBookmarkablePageRequestTarget) requestTarget)
										.getPageClass();
							} else if (requestTarget instanceof ISharedResourceRequestTarget) {
								targetClass = ((ISharedResourceRequestTarget) requestTarget)
										.getClass();
							} else if (requestTarget instanceof IListenerInterfaceRequestTarget) {
								targetClass = ((IListenerInterfaceRequestTarget) requestTarget)
										.getClass();
							}

							if (targetClass != null
									&& !httpServletRequest.isSecure()
									&& targetClass
											.isAnnotationPresent(RequiredSSL.class)) {
								StringBuffer url = new StringBuffer("https://"
										+ httpServletRequest.getServerName());

								if (!"443".equals(MyApplication.this
										.getSslPort())) {
									url.append(":" + MyApplication.this.getSslPort());
								}
								prepender.prepend(url.toString());

							} else if (targetClass != null
									&& httpServletRequest.isSecure()
									&& !targetClass
											.isAnnotationPresent(RequiredSSL.class)) {
								StringBuffer url = new StringBuffer("http://"
										+ httpServletRequest.getServerName());

								prepender.prepend(url.toString());
							}
						}
					}
				};
			}
		};

Edit (Wicket 1.3.x) alternative:

An alternative implementation for 1.3 is to do as in the original solution but just override the newRequestCycleProcessor(...) in your application like this:

Code Block

@Override
protected IRequestCycleProcessor newRequestCycleProcessor() {
    return new WebRequestCycleProcessor() {
        public void respond(RequestCycle requestCycle) {
            IRequestTarget requestTarget = requestCycle.getRequestTarget();
            if (requestTarget != null) {
                WebRequest webRequest = (WebRequest) requestCycle .getRequest();
                WebResponse webResponse = (WebResponse) requestCycle .getResponse();
                HttpServletRequest httpServletRequest = webRequest.getHttpServletRequest();

                Class pageClass = null;
                if (requestTarget instanceof IPageRequestTarget) {
                    IPageRequestTarget pageTarget = (IPageRequestTarget) requestTarget;
                    pageClass = pageTarget.getPage().getClass();
                } else if (requestTarget instanceof IBookmarkablePageRequestTarget) {
                    IBookmarkablePageRequestTarget bookmarkableTarget = (IBookmarkablePageRequestTarget) requestTarget;
                    pageClass = bookmarkableTarget.getPageClass();
                }

                if (pageClass != null && !httpServletRequest.isSecure() &&
                        pageClass.isAnnotationPresent(RequiredSSL.class)) {
                    // We should switch to https
                    StringBuffer url = new StringBuffer("https://");
                    url.append(httpServletRequest.getServerName());
                    url.append(":" + MyApplication.get().getHttpsPort());

                    url.append(webRequest.getHttpServletRequest().getContextPath());
                    url.append(webRequest.getServletPath());
                    webResponse.redirect(url.toString());
                } else if (pageClass != null && httpServletRequest.isSecure() &&
                        !pageClass.isAnnotationPresent(RequiredSSL.class)) {
                    // We should switch to http
                    StringBuffer url = new StringBuffer("http://");
                    url.append(httpServletRequest.getServerName());
                    url.append(":" + MyApplication.get().getHttpPort());

                    url.append(webRequest.getHttpServletRequest().getContextPath());
                    url.append(webRequest.getServletPath());
                    webResponse.redirect(url.toString());
                } else {
                    // We should just respond!
                    requestTarget.respond(requestCycle);
                }
            }
        }
    };
}