parent
69d22f2c78
commit
0a3542dcac
16 changed files with 324 additions and 112 deletions
@ -0,0 +1,107 @@ |
||||
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; |
||||
} |
||||
|
||||
|
||||
} |
Loading…
Reference in new issue