THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block |
---|
public class SecureWebRequestCodingStrategy extends WebRequestCodingStrategy {
private int httpPort = 80;
private int httpsPort = 443;
public SecureWebRequestCodingStrategy(int httpPort, int httpsPort ) {
this.httpPort = httpPort;
this.httpsPort = httpsPort ;
}
@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 != httpsPort ) {
url.append(":" + httpsPort );
}
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 ) {
url.append(":" + httpPort );
}
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);
}
else if ( !tmp.startsWith( "/") ) {
tmp = "/" + tmp;
}
return tmp;
}
}
|
In my application class, I did the following:
...