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 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(500, I18nUtil.getString("login_param_empty")); } // valid passowrd XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username); if (xxlJobUser == null) { return new ReturnT(500, I18nUtil.getString("login_param_unvalid")); } String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes()); if (!passwordMd5.equals(xxlJobUser.getPassword())) { return new ReturnT(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 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; } }