@DefaultHandler public Resolution view() throws JSONException, IOException { application = findApplication(name, version); if (application == null) { getContext() .getValidationErrors() .addGlobalError( new LocalizableError("app.notfound", name + (version != null ? " v" + version : ""))); return new ForwardResolution("/WEB-INF/jsp/error.jsp"); } RedirectResolution login = new RedirectResolution(LoginActionBean.class) .addParameter("name", name) // binded parameters not included ? .addParameter("version", version) .addParameter("debug", debug) .includeRequestParameters(true); loginUrl = login.getUrl(context.getLocale()); String username = context.getRequest().getRemoteUser(); if (application.isAuthenticatedRequired() && username == null) { return login; } if (username != null) { user = new JSONObject(); user.put("name", username); JSONObject roles = new JSONObject(); user.put("roles", roles); for (String role : Authorizations.getRoles(context.getRequest())) { roles.put(role, Boolean.TRUE); } } buildComponentSourceHTML(); appConfigJSON = application.toJSON(context.getRequest(), false, false); this.viewerType = retrieveViewerType(); // make hashmap for jsonobject. this.globalLayout = new HashMap<String, Object>(); JSONObject layout = application.getGlobalLayout(); Iterator<String> keys = layout.keys(); while (keys.hasNext()) { String key = keys.next(); this.globalLayout.put(key, layout.get(key)); } return new ForwardResolution("/WEB-INF/jsp/app.jsp"); }
/** * Build a hash key to make the single component source for all components cacheable but * updateable when the roles of the user change. This is not meant to be a secure hash, the roles * of a user are not secret. */ public static int getRolesCachekey(HttpServletRequest request) { Set<String> roles = Authorizations.getRoles(request); if (roles.isEmpty()) { return 0; } List<String> sorted = new ArrayList<String>(roles); Collections.sort(sorted); int hash = 0; for (String role : sorted) { hash = hash ^ role.hashCode(); } return hash; }