package com.tale.controller.admin;
import com.blade.ioc.annotation.Inject;
import com.blade.kit.DateKit;
import com.blade.kit.StringKit;
import com.blade.kit.json.JSONKit;
import com.blade.mvc.annotation.Controller;
import com.blade.mvc.annotation.JSON;
import com.blade.mvc.annotation.QueryParam;
import com.blade.mvc.annotation.Route;
import com.blade.mvc.http.HttpMethod;
import com.blade.mvc.http.Request;
import com.blade.mvc.http.Response;
import com.blade.mvc.http.wrapper.Session;
import com.blade.mvc.view.RestResponse;
import com.tale.controller.BaseController;
import com.tale.dto.LogActions;
import com.tale.exception.TipException;
import com.tale.init.TaleConst;
import com.tale.model.Users;
import com.tale.service.LogService;
import com.tale.service.UsersService;
import com.tale.utils.TaleUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 登录,退出
* Created by biezhi on 2017/2/21.
*/
@Controller("admin")
public class AuthController extends BaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(AuthController.class);
@Inject
private UsersService usersService;
@Inject
private LogService logService;
@Route(value = "login", method = HttpMethod.GET)
public String login(Response response) {
if(null != this.user()){
response.go("/admin/index");
return null;
}
return "admin/login";
}
@Route(value = "login", method = HttpMethod.POST)
@JSON
public RestResponse doLogin(@QueryParam String username,
@QueryParam String password,
@QueryParam String remeber_me,
Request request,
Session session, Response response) {
Integer error_count = cache.get("login_error_count");
try {
error_count = null == error_count ? 0 : error_count;
if(null != error_count && error_count > 3){
return RestResponse.fail("您输入密码已经错误超过3次,请10分钟后尝试");
}
Users user = usersService.login(username, password);
session.attribute(TaleConst.LOGIN_SESSION_KEY, user);
if (StringKit.isNotBlank(remeber_me)) {
TaleUtils.setCookie(response, user.getUid());
}
Users temp = new Users();
temp.setUid(user.getUid());
temp.setLogged(DateKit.getCurrentUnixTime());
usersService.update(temp);
LOGGER.info("登录成功:{}", JSONKit.toJSONString(request.querys()));
cache.set("login_error_count", 0);
logService.save(LogActions.LOGIN, JSONKit.toJSONString(request.querys()), request.address(), user.getUid());
} catch (Exception e) {
error_count+=1;
cache.set("login_error_count", error_count, 10 * 60);
String msg = "登录失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
return RestResponse.ok();
}
}