Tempo Logado JSP

Boa Tarde pessoal !!

Coloquei um filtro para termino da sessão (abaixo), porém agora preciso “pegar” o tempo que ficou logado, tive a seguinte ideia:

long tempoInicial = System.currentTimeMillis();
long tempoFinal = System.currentTimeMillis();
System.out.println(" Tempo Logado (ms): " + (tempoFinal - tempoInicial));

eu preciso armazenar esse valor toda vez que o Usuário desloga ou quando termina a sessão automáticamente, porém como fazer para informar o tempo logado, antes de invalidar a sessão ? teria como definir um metodo para ser executado quando for inválidar a sessão automaticamente ??? como invalidar a sessão se o usuário fechar a pagina ??

Alguém poderia me ajudar ??? vlw agradeço a todos… =)

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Pode criar um filtro seu mesmo
no web.xml vc tira o controle de sessao e coloca algo do tipo:

    <filter>
        <filter-name>logoutFilter</filter-name>
        <filter-class>com.tio.MyFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>logoutFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

E seu filtro pode seguir algo assim :

public class MyFilter implements Filter{
	
		@Override
		public void init(FilterConfig fc) throws ServletException {        
		}
		
		@Override
		public void destroy() {
		}
		@Override
		public void doFilter(ServletRequest request, ServletResponse response,
				FilterChain chain) throws IOException, ServletException {
			
			//se n for um direcionamento para logout vc
			//recupera de um cookie ou da sessao mesmo
			long tempoInicial = System.currentTimeMillis();  
			long tempoFinal = System.currentTimeMillis();  
			System.out.println(" Tempo Logado (ms): " + (tempoFinal - tempoInicial)); 
			//se estiver em na condicao de logout vc direciona para o logout
			//dentro do controlador de logout voce registra os dados que necessita
		}
	
	}

muito obrigado, realmente dessa forma fica fácil para controlar o tempo logado, porém minha única dúvida agora é: Como invalidar a sessão se o usuário clicar em fechar o navegador ??

vc pode adicionar uma função no atributo onunload="" da tag body pra fazer um requisição pra um “controller, servlet” que vai invalidar a sessão, mas isso pode causar alguns efeitos colaterais, pois o onunload é executado quando se clica no "X’ do browser, mas ele também é executado quando se atualiza a tela se não me engano

mas vale apena fazer um teste