Filters are called for every request made to the filtered resource - that is their purpose, there is no way to declaretively specify a filter for the first request by a client and ignore all others. The logic you write in your filter can do what it likes though.
Could you just set a session attribute as an indicator that the filter has been executed for this user's session. If it's not present, execute the filter code, set the value then continue on. If the session value is present this session must have already executed so short-circuit any processing and just continue.
subject: How to make Filter getting called only once for every User