package controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.view.Results;
import dao.Dao;
import model.Admin;
import generic.CurrentUser;
import util.MasterUtil;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.criterion.Restrictions;
@Resource
public class AdminController extends DefualtController{
public AdminController(Dao dao, CurrentUser currentUser, Result result, Validator validator, HttpServletRequest request) {
this.dao = dao;
this.currentUser = currentUser;
this.result = result;
this.validator = validator;
this.request = request;
}
@Path("/admin/login")
public void login() {
currentUser.setAdmin(null);
}
@Path("/admin/efetuaLogin")
public void efetuaLogin(Admin admin) throws Exception {
Admin aux = null;
System.out.print(MasterUtil.md5(admin.getSenha()));
if (currentUser.getAdmin() != null) {
result.use(Results.logic()).redirectTo(IndexController.class).index();
}
if(validate(admin)){
aux = findUsuario(admin);
if (aux == null) {
error("Usuário e/ou Senha inválidos!");
}
}
if (!validator.hasErrors()) {
currentUser.setAdmin(aux);
logInfo("Login");
result.use(Results.logic()).redirectTo(IndexController.class).principal();
}
validator.onErrorUse(Results.logic()).redirectTo(AdminController.class).login();
}
@Path("/admin/logout")
public void logout() {
logInfo("Logout");
this.currentUser = null;
result.use(Results.logic()).redirectTo(IndexController.class).index();
}
@Path("/admin/check")
public void check() {
logInfo("Usuário não logado");
error("Usuário não logado!!");
validator.onErrorUse(Results.page()).of(AdminController.class).login();
}
private boolean validate(Admin admin) {
boolean check=true;
if (admin.getLogin().isEmpty()) {
error("Informe o Login");
check=false;
}
if (admin.getSenha().isEmpty()) {
error("Informe a Senha");
check=false;
}
return check;
}
private Admin findUsuario(Admin admin) {
try {
admin = (Admin) dao.getSession().createCriteria(Admin.class)
.add(Restrictions.eq("login", admin.getLogin())).add(Restrictions.eq("senha", MasterUtil.md5(admin.getSenha())))
.uniqueResult();
return admin!=null && admin.getId() > 0 ? admin : null;
} catch (Exception ex) {
error("Erro ao localizar usuário ->" + admin.getLogin() + ". Motivo: " + ex.getLocalizedMessage());
return null;
}
}
}
package controller;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import dao.Dao;
import generic.CurrentUser;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
public class DefualtController {
protected Dao dao;
protected CurrentUser currentUser;
protected Result result;
protected Validator validator;
protected HttpServletRequest request;
protected ArrayList<ValidationMessage> messages = new ArrayList<ValidationMessage>();
private String getLogInfo() {
if (request != null) {
return " - " + request.getRemoteAddr();
} else {
return "";
}
}
public void logInfo(String message) {
Logger.getLogger(this.getClass().getName()).info(message + getLogInfo());
}
public void logError(String message) {
Logger.getLogger(this.getClass().getName()).error(message + getLogInfo());
}
public void logError(Exception e) {
Logger.getLogger(e.getClass().getName()).error(e.getMessage() + getLogInfo());
}
public void success(String message) {
addMessage(new ValidationMessage(message, "success"));
}
public void information(String message) {
addMessage(new ValidationMessage(message, "information"));
}
public void warning(String message) {
addMessage(new ValidationMessage(message, "warning"));
}
public void error(String message) {
validator.add(new ValidationMessage(message, "error"));
}
public void addMessage(ValidationMessage message) {
if (result == null) {
logError("Result não inicializado");
} else {
messages.add(message);
result.include("messages", messages);
}
}
}
package controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import generic.CurrentUser;
import javax.servlet.http.HttpServletRequest;
@Resource
public class IndexController extends DefualtController{
public IndexController(HttpServletRequest request, Result result, CurrentUser user, Validator validator) {
this.request = request;
this.result = result;
this.currentUser = user;
this.validator = validator;
}
@Path("/")
public void index() {
currentUser.setAdmin(null);
}
@Path("/index/captcha")
public void captcha() {
}
/* @Path("/index/principal")
public void principal(String captcha) {
String msg="errado";
String captchaSession = (String) request.getSession().getAttribute(nl.captcha.servlet.Constants.SIMPLE_CAPCHA_SESSION_KEY);
if(captcha.equals(captchaSession)){
msg="certo";
}
result.include("msg", msg);
}*/
@Path("/index/principal")
public void principal() {
}
public void formulario() {
}
public void error() {
}
}
package generic;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
import model.Admin;
import java.io.Serializable;
@Component
@SessionScoped
public class CurrentUser implements Serializable {
private Admin admin;
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
package dao;
import br.com.caelum.vraptor.ioc.Component;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
@Component
public class Dao<T> {
private final Session session;
public Dao(Session session) {
this.session = session;
}
public Session getSession() {
return session;
}
public void remove(Object dto) throws Exception {
try {
this.session.delete(dto);
} catch (Exception e) {
throw new Exception(e.toString());
}
}
public Object salva(Object dto) throws Exception {
try {
dto = this.session.merge(dto);
} catch (Exception e) {
throw new Exception(e.toString());
}
return dto;
}
public void persiste(Object dto) throws Exception {
try {
this.session.persist(dto);
} catch (Exception e) {
throw new Exception(e.toString());
}
}
public void salvaLista(ArrayList lista) throws Exception {
try {
for (Object dto : lista) {
this.session.persist(dto);
}
} catch (Exception e) {
throw new Exception(e.toString());
}
}
public List<T> listaTudo(Class classe) {
return this.session.createCriteria(classe).list();
}
public Object procura(Class classe, Long id) {
return (Object) session.load(classe, id);
}
public Object get(Class classe, Long id) {
return (Object) session.get(classe, id);
}
}
package interceptor;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
import generic.CurrentUser;
import org.apache.log4j.Logger;
@RequestScoped
public class AccessInterceptor implements Interceptor{
private CurrentUser user;
public AccessInterceptor(CurrentUser user) {
this.user = user;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) {
if (user.getAdmin() != null) {
StringBuilder str = new StringBuilder();
str.append(user.getAdmin().getLogin());
str.append("#");
str.append(user.getAdmin().getId());
str.append(" - ");
str.append(method.getResource().getType().getSimpleName());
str.append(".");
str.append(method.getMethod().getName());
str.append("()");
Logger.getLogger(AccessInterceptor.class.getName()).info(str.toString());
}
stack.next(method, instance);
}
@Override
public boolean accepts(ResourceMethod method) {
return true;
}
}
package interceptor;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.com.caelum.vraptor.view.Results;
import controller.IndexController;
import org.apache.log4j.Logger;
@RequestScoped
public class ExceptionInterceptor implements Interceptor {
private Result result;
public ExceptionInterceptor(Result result) {
this.result = result;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) {
try {
stack.next(method, instance);
} catch (Exception e) {
Logger.getLogger(ExceptionInterceptor.class.getName()).error(method.getResource().getType().getName() + "." + method.getMethod().getName() + "() - " + e.getMessage());
result.use(Results.logic()).forwardTo(IndexController.class).error();
}
}
@Override
public boolean accepts(ResourceMethod method) {
return true;
}
}
package model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="admin")
@SequenceGenerator(name="admin_id_seq", sequenceName = "admin_id_seq", allocationSize=1)
public class Admin implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="admin_id_seq")
@Column(name="id", length = 30,nullable=false)
private Long id;
@Column(name="login", length= 30, unique=true)
private String login;
@Column(name="senha", length= 60)
private String senha;
public Admin() {
}
public Admin(Long id) {
this.id = id;
}
public Admin(Long id, String login) {
this.id = id;
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
}
package util;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MasterUtil {
public static String md5(String senha) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
String s = hash.toString(16);
if (s.length() % 2 != 0) {
s = "0" + s;
}
return s;
}
}
<%@ include file="/template/header.jsp" %>
<form name="form" action="/exe/admin/efetuaLogin" method="POST">
<table width="22%" border="0" align="center" cellpadding="2" cellspacing="0" class="tborder">
<tr class="tcat">
<td colspan="2" align="left">
<center><strong><font color="#000000">Prompt de Login</font></strong></center>
</td>
</tr>
<tr bgcolor="#F5F5F5">
<td width="26%" class="smalltext">Usuário: </td>
<td width="74%"><input type="text" name="admin.login" class="input" value=""></td>
</tr>
<tr bgcolor="#F5F5F5">
<td class="smalltext">Senha:</td>
<td><input type="password" name="admin.senha" class="input" value=""></td>
</tr>
<tr bgcolor="#F5F5F5">
<td colspan="2" ><input type="submit" name="Submit2" value="Entrar"/></td>
</tr>
</table>
</form>
<%@ include file="/template/footer.jsp" %>