Se você configurar o timeout no web.xml o sistem terá o comportamento padrão e caso você faça isso no servlet session.setMaxInactiveInterval(time); o sistema assume o do código, mas só se passar nesse ponto do código.
Agora o que você quer é:
Criar um tela de cadastro e salvar essas configurações, isso você poderá armazenar as informações em uma tabela ou arquivo e quando você inicializar o sistema você ler as configurações que foram armazenada e aplicar.
o objeto HttpSession
Algumas observações
Especificado em segundos (não em mili como tinha colocado) para cada solicitação, em outras palavras, o tempo será configurado a cada solicitação.
HttpSession.setMaxInactiveInterval(int interval);
Esse método um long que é o momento em que a sessão foi criada, isso é interessante quando você quer invalidar a sessão depois de um determinado momento.
HttpSession.getCreationTime();
Há duas formas de invalida a sessão do usuário
HttpSession.invalidate() ;
HttpSession.setMaxInactiveInterval(0);
Retorna um long.
HttpSession.getLastAccessedTime() ;
Um exemplo de como ficaria (não fiz o teste, segui o raciocinio)
Como o retorno é um long, você poderá criar uma data, considerei que o usuário tem um tempo por acesso e não por solicitação, caso seja essa segunda opção faça a adaptação
HttpSession session = request.getSession();
java.util.Date dataAtual = new java.util.Date();
// Assumindo que a data foi colocado quando o usuário logou, vou colocar em um código abaixo para não confundir
java.util.Date dataSessao = (java.util.Date())session.getAttribute("dataSessao");
// Se a data atual é menor que a data da sessao invalide a sessão
if(dataAtual.compareTo(dataSessao.getTime()) <= 0){
session.invalidate() ;
}
Faça algo parecido quando o usuário logar ou caso não tenha login você pode verificar se a sessão foi criada com HttpSession.isNew() que retorna verdadeiro caso seja a primeira vez.
Faça algo parecido ou utilize o HttpSession.getCreationTime();
// No servlet
Integer timeConfig = (Integer)getServletContext().getAttribute("timeConfig");
// Data atual mais o tempo da sessão
java.util.Calendar dataSessao = Calendar.getInstance();
dataSessao.add(Calendar.HOUR, timeConfig);// Coloquei em horas, mas pode ser em minutos etc.
session.setAttribute("dataSessao", dataSessao.getTime());
Um outra coisa interessante são os listeners, você pode interceptar suas chamadas, existem para Sessão, solicitação, atributos, contexto etc.
Utilize esse o ServletContextListener para pegar as informações de configuração
ServletContextListener.contextInitialized(ServletContextEvent sce){
Integer timeConfig = //Consulta o BD ou arquivo e coloca o atributo no contexto
sce.getServletContext().setAttribute("timeConfig", timeConfig);
}
Não fiz o teste, só coloquei uma idéia.