[RESOLVIDO] Forçar o usuário a trocar a senha no primeiro login

Olá galera,

Então, eu gostaria de saber como forçar o usuário a trocar a senha na primeira vez que for acessar o sistema.
Eu uso Spring Security 3.0 e Jsf 3.0.

O usuário vai logar primeiramente com uma senha padrão do sistema, e em seguida será mostrada uma página onde ele deve digitar uma nova senha e confirmar essa nova senha.
A partir daí ele usará essa nova senha para logar no sistema.

Também preciso de uma outra funcionalidade: visualizar uma lista de usuarios do sistema, e poder ver quem está online e offline no mesmo.

Alguém tem exemplos pra fazer isso?
:roll:

Já procurei bastante na internet, mas não achei nada concreto. É a primeira vez que tento fazer algo do tipo, e não tenho muito conhecimento com Spring.

Qualquer ajuda é bem vinda.

vc quer ajuda com logica ou com implementacao, pois se for implementacao fica mais faci especificar sua duvida…

se for por logica dou uma sugestao…

ao fazer o login, se a senha estiver com a senha padrao do sistema, redirecionar para a pagina de troca de senha. Com isso, se o usuario trocar a senha para a senha padrao, ele vai forcar a trocar a senha novamente

JSF 3.0, nem sabia q ja tinha saido essa versão…rsrs

1 - vc vai ter que colocar na sua tabela de usuario, um flag do tipo boolean, que quando é feito o cadastro desse usuario vc setaria esse atributo para true e na hora de que ele efetuar o login, vc verifica se é true, se sim, vc encaminha ele para a pagina de troca de senha.

2 - para vc saber que está online ou nao, vc vai ter que criar um Map e adiciona-lo no contexto da aplicação e toda fez que o usuario efetuar o login, vc vai adiciona-lo nesse map e quando ele sair vc remove.

espero ter te ajudado.

t+

HUAHAUHAU, opaa é JSF 2.0, o primefaces que é 3.0 HSUAHSUHASUH. Confundi, desculpa.:oops:

Obrigada pela ajuda de vocês. Já tive algumas idéias agora que responderam.

:smiley:

Bom dia,

Eu não tenho idéia de como fazer um map no contexto da aplicação pra verificar se o usuário está online ou offline.

Alguém pode me ajudar?

Utiliza Spring Security 3.1.

É muito mais facil descobri qual usuário está logado, além de ser um framework muito utilizado em aplicações web!

olha,

faz o seguinte, crie uma classe para ser listener de contexto da sua aplicação e e crie um hashmap e set ele no contexto, como eu fiz aqui

public class AplicacaoListener implements ServletContextListener {
	
	@Override
	public void contextInitialized(ServletContextEvent context) {
		HashMap<Long, Usuario> usuariosLogado = new HashMap<Long, Usuario>();
		
		context.getServletContext().setAttribute("usuariosLogado", usuariosLogado);
	}
	
	@Override
	public void contextDestroyed(ServletContextEvent context) {

	}
}

depois aonde vc faz o login, basta vc pegar o hashmap que está no contexto, assim

HashMap<Long, Usuario> usuariosLogado = (HashMap<Long, Usuario>) context.getServletContext().getAttribute("usuariosLogado");
usuariosLogado.put(usuario.getId(), usuario);

vai ficar mais ou menos assim.

t+

Eu criei essa classe AplicacaoListener. E eu tenho esse ContextoBean :

[code]@ManagedBean(name = “contextoBean”)
@SessionScoped
public class ContextoBean {
private Usuario usuarioLogado = null;

/**
 * Retorna usuário logado
 */
public Usuario getUsuarioLogado() {
	FacesContext context = FacesContext.getCurrentInstance();
	ExternalContext external = context.getExternalContext();
	String nome = external.getRemoteUser();
	if (this.usuarioLogado == null
			|| !nome.equals(this.usuarioLogado.getNome())) {
		if (nome != null) {
			UsuarioRN usuarioRN = new UsuarioRN();
			this.usuarioLogado = usuarioRN.buscarPorLogin(nome);
		}
	}
	return usuarioLogado;
}

/**
 * Define o usuário logado
 * 
 * @param usuario
 *            Usuário que logou no sistema
 */
public void setUsuarioLogado(Usuario usuario) {
	this.usuarioLogado = usuario;
}[/code]

Nele que eu pego o hashmap que está no AplicacaoListener?
Estou confusa :roll:

vc tem que fazer mais ou menos isso

@ManagedBean(name = "contextoBean")
@SessionScoped
public class ContextoBean {
	private Usuario usuarioLogado = null;
	
	//vc tem q fazer get e set
	private String usuario;
	priavte String senha;
	

	/**
	 * Retorna usuário logado
	 */
	public Usuario getUsuarioLogado() {
		UsuarioRN usuarioRN = new UsuarioRN();
		this.usuarioLogado = usuarioRN.buscarPorLogin(usuario, senha);
		
		if(usuarioLogado != null){
			FacesContext context = FacesContext.getCurrentInstance();
			HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
			HashMap<Long, Usuario> usuariosLogados = (HashMap<Long, Usuario>) request.getServletContext().getAttribute("usuariosLogados");
			
			usuariosLogados.put(usuarioLogado.getId(), usuarioLogado);
		}
		
		/*if (this.usuarioLogado == null
				|| !nome.equals(this.usuarioLogado.getNome())) {
			if (nome != null) {
				UsuarioRN usuarioRN = new UsuarioRN();
				this.usuarioLogado = usuarioRN.buscarPorLogin(nome);
			}
		}*/
		return usuarioLogado;
	}

	/**
	 * Define o usuário logado
	 * 
	 * @param usuario
	 *            Usuário que logou no sistema
	 */
	public void setUsuarioLogado(Usuario usuario) {
		this.usuarioLogado = usuario;
	}

t+

:D[quote=alissonvla]JSF 3.0, nem sabia q ja tinha saido essa versão…rsrs

t+[/quote]

Oi… :smiley:

Mas quem disse que saiu a versão 3 do JSF!?!

Veja o link: http://www.oracle.com/technetwork/java/javaee/tech/javaee5-jsp-135162.html

[quote=julynhaprado]HUAHAUHAU, opaa é JSF 2.0, o primefaces que é 3.0 HSUAHSUHASUH. Confundi, desculpa.:oops:

Obrigada pela ajuda de vocês. Já tive algumas idéias agora que responderam.

:D[/quote]

Opa… rs… Ví agora rs…

Andre,
JSF 3.0? aonde vc viu na pagina que vc postou?

t+

[quote=alissonvla]Andre,
JSF 3.0? aonde vc viu na pagina que vc postou?

t+[/quote]

Oi alissonvla, blz?

Eu quis dizer q o JSF 3 ainda não existe…

abs,