package com.xxl.job.admin.service;
|
|
import com.xxl.job.admin.core.model.XxlJobUser;
|
import com.xxl.job.admin.core.util.CookieUtil;
|
import com.xxl.job.admin.core.util.I18nUtil;
|
import com.xxl.job.admin.core.util.JacksonUtil;
|
import com.xxl.job.admin.dao.XxlJobUserDao;
|
import com.xxl.job.core.biz.model.ReturnT;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.util.DigestUtils;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.math.BigInteger;
|
|
/**
|
* @author xuxueli 2019-05-04 22:13:264
|
*/
|
@Configuration
|
public class LoginService {
|
|
public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
|
|
@Resource
|
private XxlJobUserDao xxlJobUserDao;
|
|
|
private String makeToken(XxlJobUser xxlJobUser) {
|
String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
|
String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
|
return tokenHex;
|
}
|
|
private XxlJobUser parseToken(String tokenHex) {
|
XxlJobUser xxlJobUser = null;
|
if (tokenHex != null) {
|
String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray()); // username_password(md5)
|
xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
|
}
|
return xxlJobUser;
|
}
|
|
|
public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember) {
|
|
// param
|
if (username == null || username.trim().length() == 0 || password == null || password.trim().length() == 0) {
|
return new ReturnT<String>(500, I18nUtil.getString("login_param_empty"));
|
}
|
|
// valid passowrd
|
XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
|
if (xxlJobUser == null) {
|
return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
|
}
|
String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
|
if (!passwordMd5.equals(xxlJobUser.getPassword())) {
|
return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
|
}
|
|
String loginToken = makeToken(xxlJobUser);
|
|
// do login
|
CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
|
return ReturnT.SUCCESS;
|
}
|
|
/**
|
* logout
|
*
|
* @param request
|
* @param response
|
*/
|
public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response) {
|
CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
|
return ReturnT.SUCCESS;
|
}
|
|
/**
|
* logout
|
*
|
* @param request
|
* @return
|
*/
|
public XxlJobUser ifLogin(HttpServletRequest request, HttpServletResponse response) {
|
String cookieToken = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
|
if (cookieToken != null) {
|
XxlJobUser cookieUser = null;
|
try {
|
cookieUser = parseToken(cookieToken);
|
} catch (Exception e) {
|
logout(request, response);
|
}
|
if (cookieUser != null) {
|
XxlJobUser dbUser = xxlJobUserDao.loadByUserName(cookieUser.getUsername());
|
if (dbUser != null) {
|
if (cookieUser.getPassword().equals(dbUser.getPassword())) {
|
return dbUser;
|
}
|
}
|
}
|
}
|
return null;
|
}
|
|
|
}
|