Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Debugging Spring Components with Namespace based configuration

DZone's Guide to

Debugging Spring Components with Namespace based configuration

· Performance Zone ·
Free Resource

SignalFx is the only real-time cloud monitoring platform for infrastructure, microservices, and applications. The platform collects metrics and traces across every component in your cloud environment, replacing traditional point tools with a single integrated solution that works across the stack.

Sometimes it hard to debug a Spring component especially if it is Namespace based standard spring components. In this blog I will explain how to debug a spring security component. Consider the below code:

<authentication-manager>
<authentication-provider>
<user-service id="userService">
<user name="${some-user}" password="${some-password}"
authorities="secure-access" />
</user-service>
</authentication-provider>
</authentication-manager>

In the above component if there is a problem with authorization, how do you know what value is being passed? How do you know which class is this and where to put the debug break point? If you notice “user-service” is just another bean with Spring id as “userService”. Namespace based configuration is a syntactic sugar for bean definition. Spring JUnit test and autowiring capability comes to your rescue. Define a simple test function as below:

@Autowired
@Qualifier("userService")
private Object userService;
@Test
public void testUserService(){
assertNotNull(userService);
logger.debug(userService);
}

Run the above test, it will show as green. The logger message will print InMemoryDaoImpl class. Once you know that this is the object you can modify the test as below and further debug:

@Autowired
@Qualifier("userService")
private InMemoryDaoImpl userService;
@Test
public void testUserService(){
assertNotNull(userService);
UserMap map = userService.getUserMap();
//Assuming that krishna is set as dynamic property for some-user
UserDetails user = map.getUser("krishna");
assertNotNull(user);
}

This is one way to debug it, but there might be few other ways. Please suggest me.

I hope this helped.


SignalFx is built on a massively scalable streaming architecture that applies advanced predictive analytics for real-time problem detection. With its NoSample™ distributed tracing capabilities, SignalFx reliably monitors all transactions across microservices, accurately identifying all anomalies. And through data-science-powered directed troubleshooting SignalFx guides the operator to find the root cause of issues in seconds.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}