I was asked to provide a list of all the pages so the BA can specify what kind of security each of the pages should have.
I have built Site maps (or sitemaps) in different languages, both dynamically and by the time of release (pre published).
If you follow Spring @Controller and @RequestMapping annotations generating the site map is a piece of cake. Below is how to get a List of URLS:
...
import net.sourceforge.stripes.util.ResolverUtil;
...
private List<String> getSiteUrls(ControllerContext ctx, String controllersPackage) {
List<String> urls = new ArrayList<String>();
ResolverUtil<Object> resolver = new ResolverUtil<Object>();
resolver.findAnnotated(Controller.class, controllersPackage);
Set<Class<? extends Object>> controllerClasses = resolver.getClasses();
for (Class<? extends Object> controller : controllerClasses) {
String controllerRequestMapping = "";
if(controller.isAnnotationPresent(RequestMapping.class)) {
controllerRequestMapping = controller.getAnnotation(RequestMapping.class).value()[0];
if(controllerRequestMapping.endsWith("/")) {
controllerRequestMapping = controllerRequestMapping.substring(0,controllerRequestMapping.length() - 1);
}
if(controllerRequestMapping.endsWith("/*")) {
controllerRequestMapping = controllerRequestMapping.substring(0,controllerRequestMapping.length() - 2);
}
}
for (Method method : controller.getMethods()) {
if (method.isAnnotationPresent(RequestMapping.class)) {
RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
urls.add(controllerRequestMapping + requestMapping.value()[0]);
}
}
}
Collections.sort(urls);
return urls;
}
Below is a JSP to render the results:
<%@ include file="/WEB-INF/jsp/includes.jsp"%>
<%@ include file="/WEB-INF/jsp/header.jsp"%>
<h2><spring:message code="sitemap"/>:</h2>
<div id="global_error"><form:errors path="sitemap"
cssClass="errors" /></div>
<c:forEach var="url" items="${urls}">
<a href="<spring:url value="${url}"/>">${url}</a> <br/>
</c:forEach>
<%@ include file="/WEB-INF/jsp/footer.jsp"%>
No comments:
Post a Comment