Estou desenvolvendo um sistema que possui áreas restritas e outras não.
A autenticação e a restrição funcionam sem problemas, exceto quanto o usuário tenta acessar uma área restrita, não loga (nem tenta) e tenta voltar ou simplesmente acessar uma área livre.
O sistema entra em loop e não sai da tela de login, trava tudo. Só normaliza após fechar o browser e abrir novamente.
Faço uso dos filtros globais abaixo:
Code:
addGlobalFilter(new RedirectAfterLoginFilter());
addGlobalConsequence(RedirectAfterLoginFilter.REDIR, new Redirect());
addGlobalConsequence(AuthorizationFilter.ACCESSDENIED, new Redirect("/denied.jsp"));
addGlobalFilter(new AuthenticationFilter());
addGlobalFilter(new FileUploadFilter());
addGlobalConsequence(AuthenticationFilter.LOGIN, new Redirect("/login/login.jsp"));
Minhas action são mapeadas assim:
Code:
action("usuario", UsuarioAction.class).on(LIST, redir("usuario.show.mtw"));
action("login", LoginAction.class);
Minhas action implementam as seguintes interfaces: ModelDriven, Validatable, RedirectAfterLogin, AuthenticationFree, com excessao do LoginAction
Code:
public class LoginAction extends BaseLoginAction implements ModelDriven, Validatable {
private UsuarioService usuarioService = new UsuarioService();
/** Creates a new instance of LoginAction */
public LoginAction() {
}
public Object getModel() {
return this.usuarioService;
}
public String login() {
if (isPost()) {
try {
String chave = input.getStringValue("chave");
String senha = input.getStringValue("senha");
Usuario usr = new Usuario();
usr.setChave(chave);
usr.setSenha(senha);
boolean admin = false;
List<Usuario> usuarios = usuarioService.loadList(usr);
if (usuarios.size() == 0) {
output.setValue("erro", "Chave ou senha incorretos!");
return ERROR;
} else {
setUserSession(usuarios.get(0));
if (usuarios.get(0).getPerfilId() == 5 || usuarios.get(0).getPerfilId() == 3) {
admin = true;
}
session.setAttribute("admin", admin);
return SUCCESS;
}
} catch (Exception ex) {
Logger.getLogger(LoginAction.class.getName()).log(Level.SEVERE, null, ex);
return ERROR;
}
} else {
return SUCCESS;
}
}
public void prepareValidator(Validator validator, String string) {
if (isPost() && string != null) {
validator.add("chave", new RequiredFieldRule(), "A chave é um campo obrigatório!");
validator.add("chave", StringRule.getInstance(4, 4), "A chave possui %min% caracteres!");
validator.add("senha", new RequiredFieldRule(), "A senha é um campo obrigatório!");
}
}
}
Será que é BUG?