Как предотвратить создание HttpSession в Spring REST Controller - PullRequest
0 голосов
/ 21 ноября 2018

В нашем проекте мы реализовали несколько REST-сервисов, используя Spring @RestController.Проблема в том, что когда я тестирую их с помощью REST-клиента, в заголовке ответа существует JSESSIONID, поэтому я считаю, что сервер создает HTTPSession для каждого запроса, но службы не сохраняют состояние и им не требуется HTTPSession.

Есть ли способ предотвратить создание новых сессий на этих контроллерах?


Это источник RestController

@RestController
@RequestMapping("/customs/customs")
public class CustomsRestController {

    @Autowired
    private CustomsWebService customsWebService;

    @Autowired
    private CustomsSecurityContextInitializer securityContextInitializer;

    @RequestMapping(path = "/customsPorts", method = RequestMethod.GET,
            consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Collection<CustomsPort> getActiveCustomsPorts() {
        try {
            securityContextInitializer.initSecurityContext();
            return customsWebService.getActiveCustomsPorts();
        } finally {
            securityContextInitializer.clearSecurityContext();
        }
    }

    @RequestMapping(path = "/registerCustomsRequest", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public CustomsDeclarationInfo registerCustomsRequest(@RequestBody CustomsDeclarationRequest requestKey) {
        try {
            securityContextInitializer.initSecurityContext();
            requestKey.validate();
            return customsWebService.registerCustomsRequest(requestKey);
        } catch (BusinessException e) {
            return CustomsDeclarationInfo.builder().errorMessage(e.getMessage()).build();
        } finally {
            securityContextInitializer.clearSecurityContext();
        }
    }

}

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете сделать это в своей реализации WebSecurityConfigurerAdapter, установив SessionCreationPolicy в STATELESS:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
...