THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block |
---|
public class SecureWebRequestCodingStrategy extends WebRequestCodingStrategy { private int publicPorthttpPort = 80; private int securePorthttpsPort = 443; public SecureWebRequestCodingStrategy(int publicPorthttpPort, int httpsPort securePort) { this.publicPorthttpPort = publicPorthttpPort; this.securePorthttpsPort = httpsPort securePort; } @Override protected CharSequence doPostEncode(final RequestCycle requestCycle, final IRequestTarget requestTarget, final CharSequence result) { PrependingStringBuffer buf = new PrependingStringBuffer( stripWicketPath(result.toString())); if (requestTarget != null) { WebRequest webRequest = (WebRequest) requestCycle.getRequest(); HttpServletRequest httpServletRequest = webRequest .getHttpServletRequest(); Class targetClass = null; 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) .getTarget().getClass(); } else if (requestTarget instanceof IPageRequestTarget) { targetClass = ((IPageRequestTarget) requestTarget).getPage() .getClass(); } if (targetClass != null && !httpServletRequest.isSecure() && targetClass.isAnnotationPresent(RequiredSSL.class)) { StringBuffer url = new StringBuffer("https://" + httpServletRequest.getServerName()); if (443 != securePorthttpsPort ) { url.append(":" + securePorthttpsPort ); } url.append(httpServletRequest.getContextPath()); url .append(stripServletPath(httpServletRequest .getServletPath())); buf.prepend(url.toString()); } else if (targetClass != null && httpServletRequest.isSecure() && !targetClass.isAnnotationPresent(RequiredSSL.class)) { StringBuffer url = new StringBuffer("http://"); url.append(httpServletRequest.getServerName()); if (80 != httpPort publicPort) { url.append(":" + publicPorthttpPort ); } url.append(httpServletRequest.getContextPath()); url .append(stripServletPath(httpServletRequest .getServletPath())); buf.prepend(url.toString()); } else { if (!buf.toString().startsWith("/")) { buf.prepend("/"); } buf.prepend(stripServletPath(httpServletRequest .getServletPath())); buf.prepend(httpServletRequest.getContextPath()); } } return buf.toString(); } private String stripServletPath(String fullPath) { int idx = fullPath.indexOf("/", 1); return (idx == -1) ? fullPath : fullPath.substring(0, idx); } private String stripWicketPath(String fullPath) { String tmp = fullPath; int idx = -1; if ((idx = tmp.indexOf("?wicket")) != -1) { tmp = "/" + tmp.substring(idx); } else if ((idx = tmp.lastIndexOf("../")) != -1) { tmp = "/" + tmp.substring(idx + 3); } return tmp; } } |
...
Code Block |
---|
protected IRequestCycleProcessor newRequestCycleProcessor() { return new WebRequestCycleProcessor() { @Override protected IRequestCodingStrategy newRequestCodingStrategy() { String publicPorthttpPort = MyApplication.this.getPublicPort(); int publicPortValhttpPortVal = 80; if ( publicPorthttpPort != null && !publicPorthttpPort.equals( "" )) { publicPortValhttpPortVal = new Integer( publicPorthttpPort ).intValue(); } String securePorthttpsPort = MyApplication.this.getSslPort(); if ( securePorthttpsPort == null || securePorthttpsPort.equals( "" )) { return super.newRequestCodingStrategy(); } return new SecureWebRequestCodingStrategy( publicPortValhttpsPortVal, new Integer( securePort httpsPort).intValue() ); } }; } |
By using the above solution, anytime I placed a @RequiredSSL on a Form, Link, Button declaration, the proper URL will be generated (https for secured items and http for non-secure items).
...