| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 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 */@Configurationpublic 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;    }}
 |