How Spring Security Filter Chain works

The Spring security filter chain is a very complex and flexible engine. Key filters in the chain are (in the order) SecurityContextPersistenceFilter (restores Authentication from JSESSIONID) UsernamePasswordAuthenticationFilter (performs authentication) ExceptionTranslationFilter (catch security exceptions from FilterSecurityInterceptor) FilterSecurityInterceptor (may throw authentication and authorization exceptions) Looking at the current stable release 4.2.1 documentation, section 13.3 Filter Ordering you … Read more

What is the difference between ApplicationContext and WebApplicationContext in Spring MVC?

Web Application context extended Application Context which is designed to work with the standard javax.servlet.ServletContext so it’s able to communicate with the container. public interface WebApplicationContext extends ApplicationContext { ServletContext getServletContext(); } Beans, instantiated in WebApplicationContext will also be able to use ServletContext if they implement ServletContextAware interface package org.springframework.web.context; public interface ServletContextAware extends Aware … Read more

Spring Boot not serving static content

Not to raise the dead after more than a year, but all the previous answers miss some crucial points: @EnableWebMvc on your class will disable org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration. That’s fine if you want complete control but otherwise, it’s a problem. There’s no need to write any code to add another location for static resources in addition to … Read more

With Spring can I make an optional path variable?

You can’t have optional path variables, but you can have two controller methods which call the same service code: @RequestMapping(value = “/json/{type}”, method = RequestMethod.GET) public @ResponseBody TestBean typedTestBean( HttpServletRequest req, @PathVariable String type, @RequestParam(“track”) String track) { return getTestBean(type); } @RequestMapping(value = “/json”, method = RequestMethod.GET) public @ResponseBody TestBean testBean( HttpServletRequest req, @RequestParam(“track”) String … Read more

When use ResponseEntity and @RestController for Spring RESTful applications

ResponseEntity is meant to represent the entire HTTP response. You can control anything that goes into it: status code, headers, and body. @ResponseBody is a marker for the HTTP response body and @ResponseStatus declares the status code of the HTTP response. @ResponseStatus isn’t very flexible. It marks the entire method so you have to be … Read more

What is the difference between Spring’s GA, RC and M2 releases?

GA = General availability (a release); should be very stable and feature complete RC = Release candidate; probably feature complete and should be pretty stable – problems should be relatively rare and minor, but worth reporting to try to get them fixed for release. M = Milestone build – probably not feature complete; should be … Read more

How do I mock an autowired @Value field in Spring with Mockito?

You can use the magic of Spring’s ReflectionTestUtils.setField in order to avoid making any modifications whatsoever to your code. The comment from MichaƂ Stochmal provides an example: use ReflectionTestUtils.setField(bean, “fieldName”, “value”); before invoking your bean method during test. Check out this tutorial for even more information, although you probably won’t need it since the method … Read more

How to set an “Accept:” header on Spring RestTemplate request?

I suggest using one of the exchange methods that accepts an HttpEntity for which you can also set the HttpHeaders. (You can also specify the HTTP method you want to use.) For example, RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); HttpEntity<String> entity = new HttpEntity<>(“body”, headers); restTemplate.exchange(url, HttpMethod.POST, entity, String.class); I … Read more

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)