package com.jspxcms.core.service.impl;
import java.sql.Timestamp;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jspxcms.core.domain.User;
import com.jspxcms.core.domain.UserDetail;
import com.jspxcms.core.repository.UserDao;
import com.jspxcms.core.service.UserShiroService;
@Service
@Transactional(readOnly = true)
public class UserShiroServiceImpl implements UserShiroService {
public User findByUsername(String username) {
return dao.findByUsername(username);
}
public User get(Integer id) {
return dao.findOne(id);
}
@Transactional
public User updateLoginSuccess(Integer userId, String loginIp) {
User user = get(userId);
UserDetail detail = user.getDetail();
detail.setLoginErrorDate(null);
detail.setLoginErrorCount(0);
detail.setPrevLoginIp(detail.getLastLoginIp());
detail.setPrevLoginDate(detail.getLastLoginDate());
detail.setLastLoginIp(loginIp);
detail.setLastLoginDate(new Timestamp(System.currentTimeMillis()));
detail.setLogins(detail.getLogins() + 1);
return user;
}
@Transactional
public User updateLoginFailure(String username) {
User user = findByUsername(username);
if (user != null) {
UserDetail detail = user.getDetail();
Date date = detail.getLoginErrorDate();
if (date != null
&& System.currentTimeMillis() - date.getTime() < UserDetail.LOGIN_ERROR_MILLIS) {
detail.setLoginErrorCount(detail.getLoginErrorCount() + 1);
} else {
detail.setLoginErrorCount(1);
}
detail.setLoginErrorDate(new Timestamp(System.currentTimeMillis()));
}
return user;
}
private UserDao dao;
@Autowired
public void setDao(UserDao dao) {
this.dao = dao;
}
}