8ff9880c5f79d49c8786473d7af6f8c7395f0e51.svn-base 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.xxl.job.admin.service;
  2. import com.xxl.job.admin.core.model.XxlJobUser;
  3. import com.xxl.job.admin.core.util.CookieUtil;
  4. import com.xxl.job.admin.core.util.I18nUtil;
  5. import com.xxl.job.admin.core.util.JacksonUtil;
  6. import com.xxl.job.admin.dao.XxlJobUserDao;
  7. import com.xxl.job.core.biz.model.ReturnT;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.util.DigestUtils;
  10. import javax.annotation.Resource;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.math.BigInteger;
  14. /**
  15. * @author xuxueli 2019-05-04 22:13:264
  16. */
  17. @Configuration
  18. public class LoginService {
  19. public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
  20. @Resource
  21. private XxlJobUserDao xxlJobUserDao;
  22. private String makeToken(XxlJobUser xxlJobUser){
  23. String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
  24. String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
  25. return tokenHex;
  26. }
  27. private XxlJobUser parseToken(String tokenHex){
  28. XxlJobUser xxlJobUser = null;
  29. if (tokenHex != null) {
  30. String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray()); // username_password(md5)
  31. xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
  32. }
  33. return xxlJobUser;
  34. }
  35. public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember){
  36. // param
  37. if (username==null || username.trim().length()==0 || password==null || password.trim().length()==0){
  38. return new ReturnT<String>(500, I18nUtil.getString("login_param_empty"));
  39. }
  40. // valid passowrd
  41. XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
  42. if (xxlJobUser == null) {
  43. return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
  44. }
  45. String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
  46. if (!passwordMd5.equals(xxlJobUser.getPassword())) {
  47. return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
  48. }
  49. String loginToken = makeToken(xxlJobUser);
  50. // do login
  51. CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
  52. return ReturnT.SUCCESS;
  53. }
  54. /**
  55. * logout
  56. *
  57. * @param request
  58. * @param response
  59. */
  60. public ReturnT<String> logout(HttpServletRequest request, HttpServletResponse response){
  61. CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
  62. return ReturnT.SUCCESS;
  63. }
  64. /**
  65. * logout
  66. *
  67. * @param request
  68. * @return
  69. */
  70. public XxlJobUser ifLogin(HttpServletRequest request, HttpServletResponse response){
  71. String cookieToken = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
  72. if (cookieToken != null) {
  73. XxlJobUser cookieUser = null;
  74. try {
  75. cookieUser = parseToken(cookieToken);
  76. } catch (Exception e) {
  77. logout(request, response);
  78. }
  79. if (cookieUser != null) {
  80. XxlJobUser dbUser = xxlJobUserDao.loadByUserName(cookieUser.getUsername());
  81. if (dbUser != null) {
  82. if (cookieUser.getPassword().equals(dbUser.getPassword())) {
  83. return dbUser;
  84. }
  85. }
  86. }
  87. }
  88. return null;
  89. }
  90. }