You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/01/28 20:34:06 UTC
[jspwiki] 05/32: add synchronization to ajaxServlets on
WikiAjaxDispatcherServlet + apply intellij's suggested format
This is an automated email from the ASF dual-hosted git repository.
juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit d9ad1ac1e570974bcc494098cc71baa69fdb6cd5
Author: juanpablo <ju...@apache.org>
AuthorDate: Sat Jan 18 15:28:54 2020 +0100
add synchronization to ajaxServlets on WikiAjaxDispatcherServlet + apply intellij's suggested format
---
.../wiki/ajax/WikiAjaxDispatcherServlet.java | 123 +++++++++++----------
1 file changed, 62 insertions(+), 61 deletions(-)
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java b/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
index 88bcbf1..41d11ba 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
@@ -36,9 +36,10 @@ import java.io.IOException;
import java.security.Permission;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
/**
* This provides a simple ajax servlet for handling /ajax/<ClassName> requests.
@@ -47,9 +48,10 @@ import java.util.Map;
* @since 2.10.2-svn12
*/
public class WikiAjaxDispatcherServlet extends HttpServlet {
+
private static final long serialVersionUID = 1L;
- private static Map<String,AjaxServletContainer> ajaxServlets = new HashMap<String,AjaxServletContainer>();
- static final Logger log = Logger.getLogger(WikiAjaxDispatcherServlet.class.getName());
+ private static final Map< String, AjaxServletContainer > ajaxServlets = new ConcurrentHashMap<>();
+ private static final Logger log = Logger.getLogger( WikiAjaxDispatcherServlet.class.getName() );
private String PATH_AJAX = "/ajax/";
private WikiEngine m_engine;
@@ -60,95 +62,92 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
* Note: Do not change this without also changing the web.xml file.
*/
@Override
- public void init(ServletConfig config)
- throws ServletException {
- super.init(config);
- m_engine = WikiEngine.getInstance(config);
- PATH_AJAX = "/"+TextUtil.getStringProperty(m_engine.getWikiProperties(), "jspwiki.ajax.url.prefix", "ajax")+"/";
- log.info("WikiAjaxDispatcherServlet initialized.");
+ public void init( final ServletConfig config ) throws ServletException {
+ super.init( config );
+ m_engine = WikiEngine.getInstance( config );
+ PATH_AJAX = "/"+TextUtil.getStringProperty( m_engine.getWikiProperties(), "jspwiki.ajax.url.prefix", "ajax" ) + "/";
+ log.info( "WikiAjaxDispatcherServlet initialized." );
}
/**
* Register a {@link WikiAjaxServlet} using the servlet mapping as the alias
*/
- public static void registerServlet(WikiAjaxServlet servlet) {
- registerServlet(servlet.getServletMapping(),servlet);
+ public static void registerServlet( final WikiAjaxServlet servlet ) {
+ registerServlet( servlet.getServletMapping(), servlet );
}
/**
* Register a {@link WikiAjaxServlet} with a specific alias, and default permission {@link PagePermission#VIEW}.
*/
- public static void registerServlet(String alias, WikiAjaxServlet servlet) {
- registerServlet(alias, servlet, PagePermission.VIEW);
+ public static void registerServlet( final String alias, final WikiAjaxServlet servlet ) {
+ registerServlet( alias, servlet, PagePermission.VIEW );
}
/**
* Regster a {@link WikiAjaxServlet} given an alias, the servlet, and the permission.
* This creates a temporary bundle object called {@link WikiAjaxDispatcherServlet.AjaxServletContainer}
+ *
* @param alias the uri link to this servlet
* @param servlet the servlet being registered
* @param perm the permission required to execute the servlet.
*/
- public static void registerServlet(String alias, WikiAjaxServlet servlet, Permission perm) {
- log.info("WikiAjaxDispatcherServlet registering "+alias+"="+servlet+" perm="+perm);
- ajaxServlets.put(alias,new AjaxServletContainer(alias, servlet, perm));
+ public static void registerServlet( final String alias, final WikiAjaxServlet servlet, final Permission perm ) {
+ log.info( "WikiAjaxDispatcherServlet registering " + alias + "=" + servlet + " perm=" + perm );
+ ajaxServlets.put( alias, new AjaxServletContainer( alias, servlet, perm ) );
}
/**
* Calls {@link #performAction}
*/
@Override
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws IOException, ServletException {
- performAction(req,res);
+ public void doPost( final HttpServletRequest req, final HttpServletResponse res ) throws IOException, ServletException {
+ performAction( req, res );
}
/**
* Calls {@link #performAction}
*/
@Override
- public void doGet(HttpServletRequest req, HttpServletResponse res)
- throws IOException, ServletException {
- performAction(req,res);
+ public void doGet( final HttpServletRequest req, final HttpServletResponse res ) throws IOException, ServletException {
+ performAction( req, res );
}
/**
- * The main method which get the requestURI "/ajax/<ServletName>", gets the
- * {@link #getServletName} and finds the servlet using {@link #findServletByName}.
- * It then calls {@link WikiAjaxServlet#service} method.
+ * The main method which get the requestURI "/ajax/<ServletName>", gets the {@link #getServletName} and finds the servlet using
+ * {@link #findServletByName}. It then calls {@link WikiAjaxServlet#service} method.
+ *
* @param req the inbound request
* @param res the outbound response
- * @throws IOException
+ * @throws IOException if WikiEngine's content encoding is valid
* @throws ServletException if no registered servlet can be found
*/
private void performAction( final HttpServletRequest req, final HttpServletResponse res ) throws IOException, ServletException {
final String path = req.getRequestURI();
- final String servletName = getServletName(path);
- if (servletName!=null) {
- final AjaxServletContainer container = findServletContainer(servletName);
- if (container != null) {
+ final String servletName = getServletName( path );
+ if( servletName != null) {
+ final AjaxServletContainer container = findServletContainer( servletName );
+ if( container != null ) {
final WikiAjaxServlet servlet = container.servlet;
- if ( validatePermission(req,container) ) {
- req.setCharacterEncoding(m_engine.getContentEncoding().displayName());
- res.setCharacterEncoding(m_engine.getContentEncoding().displayName());
- final String actionName = AjaxUtil.getNextPathPart(req.getRequestURI(), servlet.getServletMapping());
- log.debug("actionName="+actionName);
- final Object params = req.getParameter("params");
- log.debug("params="+params);
- List<String> paramValues = new ArrayList<>();
- if (params instanceof String) {
- final String paramString = (String)params;
- if (StringUtils.isNotBlank(paramString)) {
- paramValues = Arrays.asList(paramString.trim().split(","));
+ if ( validatePermission( req, container ) ) {
+ req.setCharacterEncoding( m_engine.getContentEncoding().displayName() );
+ res.setCharacterEncoding( m_engine.getContentEncoding().displayName() );
+ final String actionName = AjaxUtil.getNextPathPart( req.getRequestURI(), servlet.getServletMapping() );
+ log.debug( "actionName=" + actionName );
+ final String params = req.getParameter( "params" );
+ log.debug( "params=" + params );
+ List< String > paramValues = new ArrayList<>();
+ if( params != null ) {
+ if( StringUtils.isNotBlank( params ) ) {
+ paramValues = Arrays.asList( params.trim().split( "," ) );
}
}
- servlet.service(req, res, actionName, paramValues);
+ servlet.service( req, res, actionName, paramValues );
} else {
- log.warn("Servlet container "+container+" not authorised. Permission required.");
+ log.warn( "Servlet container " + container + " not authorised. Permission required." );
}
} else {
- log.error("No registered class for servletName=" + servletName + " in path=" + path);
- throw new ServletException("No registered class for servletName=" + servletName);
+ log.error( "No registered class for servletName=" + servletName + " in path=" + path );
+ throw new ServletException( "No registered class for servletName=" + servletName );
}
}
}
@@ -160,11 +159,11 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
* @param container the container info of the servlet
* @return true if permission is valid
*/
- private boolean validatePermission(HttpServletRequest req, AjaxServletContainer container) {
+ private boolean validatePermission( final HttpServletRequest req, final AjaxServletContainer container ) {
final WikiEngine e = WikiEngine.getInstance(req.getSession().getServletContext(), null);
boolean valid = false;
- if (container != null) {
- valid = e.getAuthorizationManager().checkPermission(WikiSession.getWikiSession(e, req), container.permission);
+ if( container != null ) {
+ valid = e.getAuthorizationManager().checkPermission( WikiSession.getWikiSession( e, req ), container.permission );
}
return valid;
}
@@ -176,8 +175,8 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
* @return The ServletName for the requestURI, or null
* @throws ServletException if the path is invalid
*/
- public String getServletName(String path) throws ServletException {
- return AjaxUtil.getNextPathPart(path, PATH_AJAX);
+ public String getServletName( final String path ) throws ServletException {
+ return AjaxUtil.getNextPathPart( path, PATH_AJAX );
}
/**
@@ -186,8 +185,8 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
* @param servletAlias the name of the servlet from {@link #getServletName}
* @return The first servlet found, or null.
*/
- private AjaxServletContainer findServletContainer(String servletAlias) {
- return ajaxServlets.get(servletAlias);
+ private AjaxServletContainer findServletContainer( final String servletAlias ) {
+ return ajaxServlets.get( servletAlias );
}
/**
@@ -196,20 +195,21 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
* @param servletAlias the value provided to {@link #registerServlet}
* @return the {@link WikiAjaxServlet} given the servletAlias that it was registered with.
*/
- public WikiAjaxServlet findServletByName(String servletAlias) {
- final AjaxServletContainer container = ajaxServlets.get(servletAlias);
- if (container != null) {
+ public WikiAjaxServlet findServletByName( final String servletAlias ) {
+ final AjaxServletContainer container = ajaxServlets.get( servletAlias );
+ if( container != null ) {
return container.servlet;
}
return null;
}
private static class AjaxServletContainer {
- String alias;
- WikiAjaxServlet servlet;
- Permission permission;
- public AjaxServletContainer(String alias, WikiAjaxServlet servlet, Permission permission) {
+ final String alias;
+ final WikiAjaxServlet servlet;
+ final Permission permission;
+
+ public AjaxServletContainer( final String alias, final WikiAjaxServlet servlet, final Permission permission ) {
this.alias = alias;
this.servlet = servlet;
this.permission = permission;
@@ -217,8 +217,9 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
@Override
public String toString() {
- return getClass().getSimpleName()+" "+alias+"="+servlet.getClass().getSimpleName()+" permission="+permission;
+ return getClass().getSimpleName() + " " + alias + "=" + servlet.getClass().getSimpleName() + " permission=" + permission;
}
+
}
}