Before I tell you how to do this, I'd like to reiterate what Luke said. Using http after authentication has occured should not be done. I understand you do not make requirements, but it is good to educate those who make requirements so that they can make an informed decision; after all, you are the expert. Insufficient Transport Layer Protection is on the OWASP Top 10 Security Issues, so changing to HTTP after login makes your application an ideal target. Below is a quote from OWASP:
Applications frequently do not protect network traffic. They may use SSL/TLS during authentication, but not elsewhere, exposing data and session IDs to interception.

Originally Posted by
paolocollector
Question: how can I start a session in http first?
In order to ensure a session is created over HTTP and not HTTPS you can create a custom filter
- The filter should intercept every request.
- First it checks to see if the session has already been created using HttpServletRequest.getSession(false) != null. If a session exists, the filterchain continues without any processing done by the custom filter.
- If the session has not been created it checks to see if the request came from http, if it has it creates a new session using HttpServletRequest.getSession() and continues the filterchain without further processing.
- If the session has not been created and the request is https redirect to http and do not continue the filterchain.
Note that you will probably have some issues using session fixation protection that is built into Spring Security, so you may need to customize this or disable it. Disabling session fixation protection has other negative security implications and I do not recommend doing it.

Originally Posted by
paolocollector
I want the user to be logged in before doing anything else.
You can create a session prior to being logged in, so this shouldn't be an issue.
HTH,