1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| 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.beans.factory.annotation.Autowired; 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;
@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()); xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class); } return xxlJobUser; } @Autowired private LdapUserService ldapUserService;
public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember) {
if (username == null || username.trim().length() == 0 || password == null || password.trim().length() == 0) { return new ReturnT<String>(500, I18nUtil.getString("login_param_empty")); }
XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
boolean isLdapUser = ldapUserService.existByUid(username); if (isLdapUser) { if (!ldapUserService.verify(username, password)) { return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid")); } if (xxlJobUser == null) { xxlJobUser = new XxlJobUser(); xxlJobUser.setPassword("123456"); xxlJobUser.setUsername(username); xxlJobUserDao.save(xxlJobUser); } } else { 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);
CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember); return ReturnT.SUCCESS; }
public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){ CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY); return ReturnT.SUCCESS; }
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; } }
|