X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2FClampServlet.java;h=52931340aeaa927754aa2f1e1c128ec6b4cadc2f;hb=3c09a51d8b1b889cee61835f54c286ded075eda8;hp=2ef57803e3ece6bb239a0c1f68a7255fc47f672d;hpb=054f1d1e13b4a7f0dc3a84d4c282019a3c528043;p=clamp.git diff --git a/src/main/java/org/onap/clamp/clds/ClampServlet.java b/src/main/java/org/onap/clamp/clds/ClampServlet.java index 2ef57803..52931340 100644 --- a/src/main/java/org/onap/clamp/clds/ClampServlet.java +++ b/src/main/java/org/onap/clamp/clds/ClampServlet.java @@ -23,78 +23,103 @@ package org.onap.clamp.clds; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + import java.io.IOException; import java.security.Principal; import java.util.ArrayList; import java.util.List; + +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletException; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; import org.apache.camel.component.servlet.CamelHttpTransportServlet; - +import org.onap.clamp.clds.service.SecureServicePermission; import org.springframework.context.ApplicationContext; -import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.http.HttpStatus; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.web.context.support.WebApplicationContextUtils; -import org.onap.clamp.clds.config.ClampProperties; -import org.onap.clamp.clds.service.SecureServicePermission; -import org.onap.clamp.clds.util.ClampTimer; - - public class ClampServlet extends CamelHttpTransportServlet { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class); + /** + * + */ + private static final long serialVersionUID = -4198841134910211542L; + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class); public static final String PERM_INSTANCE = "clamp.config.security.permission.instance"; - public static final String PERM_CL= "clamp.config.security.permission.type.cl"; - public static final String PERM_TEMPLACE = "clamp.config.security.permission.type.template"; + public static final String PERM_CL = "clamp.config.security.permission.type.cl"; + public static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template"; + public static final String PERM_VF = "clamp.config.security.permission.type.filter.vf"; + public static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage"; + public static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca"; - protected void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + /** + * When AAF is enabled, request object will contain a cadi Wrapper, so queries + * to isUserInRole will invoke a http call to AAF server. + */ + @Override + protected void doService(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { List permissionList = new ArrayList<>(); - // Get Principal info and translate it into Spring Authentication - // If authenticataion is null: a) the authentication info was set manually in the previous thread - // b) handled by Spring automatically - // for the 2 cases above, no need for the translation, just skip the following step - if (null == authentication) { - logger.debug ("Populate Spring Authenticataion info manually."); - ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()); - // Start a timer to clear the authentication after 5 mins, so that the authentication will be reinitialized with AAF DB - new ClampTimer(300); - String cldsPersmissionTypeCl = applicationContext.getEnvironment().getProperty(PERM_INSTANCE); - String cldsPermissionTypeTemplate = applicationContext.getEnvironment().getProperty(PERM_CL); - String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_TEMPLACE); + ApplicationContext applicationContext = WebApplicationContextUtils + .getWebApplicationContext(this.getServletContext()); - // set the stragety to Mode_Global, so that all thread is able to see the authentication - SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL); - Principal p = request.getUserPrincipal(); + String cldsPersmissionTypeCl = applicationContext.getEnvironment().getProperty(PERM_CL); + String cldsPermissionTypeTemplate = applicationContext.getEnvironment().getProperty(PERM_TEMPLATE); + String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE); + String cldsPermissionTypeFilterVf = applicationContext.getEnvironment().getProperty(PERM_VF); + String cldsPermissionTypeClManage = applicationContext.getEnvironment().getProperty(PERM_MANAGE); + String cldsPermissionTypeTosca = applicationContext.getEnvironment().getProperty(PERM_TOSCA); + // set the stragety to Mode_Global, so that all thread is able to + // see the authentication + SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL); + Principal p = request.getUserPrincipal(); + if (null != p) { permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "read")); permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "update")); - permissionList.add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "read")); - permissionList.add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "update")); + permissionList + .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "read")); + permissionList + .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "update")); + permissionList.add(SecureServicePermission.create(cldsPermissionTypeFilterVf, cldsPermissionInstance, "*")); + permissionList.add(SecureServicePermission.create(cldsPermissionTypeClManage, cldsPermissionInstance, "*")); + permissionList.add(SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read")); + permissionList + .add(SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "update")); List grantedAuths = new ArrayList<>(); - for (SecureServicePermission perm:permissionList) { + for (SecureServicePermission perm : permissionList) { String permString = perm.toString(); if (request.isUserInRole(permString)) { grantedAuths.add(new SimpleGrantedAuthority(permString)); } } - Authentication auth = new UsernamePasswordAuthenticationToken(new User(p.getName(), "", grantedAuths), "", grantedAuths); + + Authentication auth = new UsernamePasswordAuthenticationToken(new User(p.getName(), "", grantedAuths), "", + grantedAuths); SecurityContextHolder.getContext().setAuthentication(auth); } - super.doService(request, response); + try { + super.doService(request, response); + } catch (ServletException | IOException ioe) { + logger.error("Exception caught when executing doService in servlet", ioe); + try { + response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value()); + } catch (IOException e) { + logger.error("Exception caught when executing HTTP sendError in servlet", e); + } + } + } } \ No newline at end of file