X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2FClampServlet.java;h=c199727914ef1cd8d2b78a4b67200da9db4a35eb;hb=bf8f0ab08a7b2d60e2f6fd8c8f1e2203c3df97ea;hp=e8fd83e2e4667d3033a1ef90a30b3b27c06c9d24;hpb=da09b9285c8f4ffe6bfd563285580ccce70cdd20;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 e8fd83e2..c1997279 100644 --- a/src/main/java/org/onap/clamp/clds/ClampServlet.java +++ b/src/main/java/org/onap/clamp/clds/ClampServlet.java @@ -5,6 +5,8 @@ * Copyright (C) 2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -26,9 +28,11 @@ package org.onap.clamp.clds; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import fj.data.Array; import java.io.IOException; import java.security.Principal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.servlet.ServletException; @@ -36,7 +40,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.camel.component.servlet.CamelHttpTransportServlet; -import org.onap.clamp.clds.service.SecureServicePermission; +import org.onap.clamp.authorization.SecureServicePermission; import org.springframework.context.ApplicationContext; import org.springframework.http.HttpStatus; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -54,50 +58,49 @@ public class ClampServlet extends CamelHttpTransportServlet { */ 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_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"; - public static final String AUTHENTICATION_CLASS = "clamp.config.security.authentication.class"; + private static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class); + private static final String PERM_INSTANCE = "clamp.config.security.permission.instance"; + private static final String PERM_CL = "clamp.config.security.permission.type.cl"; + private static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template"; + private static final String PERM_VF = "clamp.config.security.permission.type.filter.vf"; + private static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage"; + private static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca"; + private static final String AUTHENTICATION_CLASS = "clamp.config.security.authentication.class"; + private static final String READ = "read"; + private static final String UPDATE = "update"; + private static List permissionList; - private synchronized Class loadDynamicAuthenticationClass() { - try { - String authenticationObject = WebApplicationContextUtils.getWebApplicationContext(getServletContext()) - .getEnvironment().getProperty(AUTHENTICATION_CLASS); - return Class.forName(authenticationObject); - } catch (ClassNotFoundException e) { - logger.error( - "Exception caught when attempting to create associated class of config:" + AUTHENTICATION_CLASS, e); - return Object.class; - } + private synchronized String[] loadDynamicAuthenticationClasses() { + String[] authenticationObjects = WebApplicationContextUtils.getWebApplicationContext(getServletContext()) + .getEnvironment().getProperty(AUTHENTICATION_CLASS).split(","); + Arrays.stream(authenticationObjects).forEach(className -> className.trim()); + return authenticationObjects; } private synchronized List getPermissionList() { if (permissionList == null) { permissionList = new ArrayList<>(); ApplicationContext applicationContext = WebApplicationContextUtils - .getWebApplicationContext(getServletContext()); + .getWebApplicationContext(getServletContext()); String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE); permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL), - cldsPermissionInstance, "read")); + cldsPermissionInstance, READ)); permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL), - cldsPermissionInstance, "update")); + cldsPermissionInstance, UPDATE)); permissionList.add(SecureServicePermission.create( - applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "read")); + applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, READ)); permissionList.add(SecureServicePermission.create( - applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "update")); + applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, UPDATE)); permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_VF), - cldsPermissionInstance, "*")); + cldsPermissionInstance, "*")); permissionList.add(SecureServicePermission - .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*")); + .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*")); permissionList.add(SecureServicePermission - .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "read")); + .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, READ)); permissionList.add(SecureServicePermission - .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "update")); + .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), + cldsPermissionInstance, UPDATE)); } return permissionList; } @@ -107,10 +110,10 @@ public class ClampServlet extends CamelHttpTransportServlet { * to isUserInRole will invoke a http call to AAF server. */ @Override - protected void doService(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + protected void doService(HttpServletRequest request, HttpServletResponse response) { Principal principal = request.getUserPrincipal(); - if (loadDynamicAuthenticationClass().isInstance(principal)) { + if (principal != null && Arrays.stream(loadDynamicAuthenticationClasses()) + .anyMatch(className -> className.equals(principal.getName()))) { // When AAF is enabled, there is a need to provision the permissions to Spring // system List grantedAuths = new ArrayList<>(); @@ -120,8 +123,8 @@ public class ClampServlet extends CamelHttpTransportServlet { grantedAuths.add(new SimpleGrantedAuthority(permString)); } } - Authentication auth = new UsernamePasswordAuthenticationToken(new User(principal.getName(), "", grantedAuths), "", - grantedAuths); + Authentication auth = new UsernamePasswordAuthenticationToken(new User(principal.getName(), "", + grantedAuths), "", grantedAuths); SecurityContextHolder.getContext().setAuthentication(auth); } try { @@ -134,6 +137,5 @@ public class ClampServlet extends CamelHttpTransportServlet { logger.error("Exception caught when executing HTTP sendError in servlet", e); } } - } -} \ No newline at end of file +}