The following demo shows how to inject the Spring Security
username/password credentials from a User Provided service on PCF,
hence using the VCAP_SERVICES env variable to inject the values required
to protect the application using HTTP Basic Authentication
while running in PCF. Spring Boot automatically converts this data into a
flat set of properties so you can easily get to the data
as shown below.
The demo application can be found as follows
https://github.com/papicella/springsecurity-cf-cups
The application.yml would access the VCAP_SERVICES CF env variable using the the Spring Boot flat set of properties as shown below.
eg:
VCAP_SERVICES
System-Provided:
{
"VCAP_SERVICES": {
"user-provided": [
{
"credentials": {
"password": "myadminpassword",
"username": "myadminuser"
},
"label": "user-provided",
"name": "my-cfcups-service",
"syslog_drain_url": "",
"tags": [],
"volume_mounts": []
}
]
}
}
...
application.yml
spring:
application:
name: security-cf-cups-demo
security:
user:
name: ${vcap.services.my-cfcups-service.credentials.username:admin}
password: ${vcap.services.my-cfcups-service.credentials.password:password}
Search This Blog
Showing posts with label VCAP_SERVICES. Show all posts
Showing posts with label VCAP_SERVICES. Show all posts
Friday, 15 September 2017
Thursday, 6 October 2016
Reading VCAP_SERVICES and VCAP_APPLICATION from a Spring Boot Rest Controller in PCF
Note for myself: Reading PCF System and ENV variables
Utils.java (Referenced in Code above)
package com.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class DemoRest
{
private static final Logger logger = LoggerFactory.getLogger(DemoRest.class);
@RequestMapping(value = "/version", method = RequestMethod.GET)
public String version()
{
return "1.0";
}
@RequestMapping(value = "/vcapapplication", method = RequestMethod.GET)
public Map vcapApplication() throws Exception
{
return Utils.getEnvMap("VCAP_APPLICATION");
}
@RequestMapping(value = "/vcapservices", method = RequestMethod.GET)
public Map vcapServices() throws Exception
{
return Utils.getEnvMap("VCAP_SERVICES");
}
@RequestMapping(value = "/vcapservices_json", method = RequestMethod.GET)
public String vcapServicesJSON() throws Exception
{
return System.getenv().get("VCAP_SERVICES");
}
@RequestMapping(value = "/appindex", method = RequestMethod.GET)
public String appIndex() throws Exception
{
String instanceIndex = "N/A";
try
{
instanceIndex =
Utils.getEnvMap("VCAP_APPLICATION").getOrDefault("instance_index", "N/A").toString();
}
catch (Exception ex)
{
logger.info("Exception getting application index : " + ex.getMessage());
}
return instanceIndex;
}
@RequestMapping(value = "/getEnvVariable/{env_var}", method = RequestMethod.GET)
public String getEnvVariable(@PathVariable String env_var)
{
return System.getenv().get(env_var);
}
}
Utils.java (Referenced in Code above)
package com.example;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class Utils
{
public static Map getEnvMap(String vcap) throws Exception
{
String vcapEnv = System.getenv(vcap);
ObjectMapper mapper = new ObjectMapper();
if (vcapEnv != null) {
Map<String, ?> vcapMap = mapper.readValue(vcapEnv, Map.class);
return vcapMap;
}
return new HashMap<String, String>();
}
}
Subscribe to:
Posts (Atom)