ShiroUtils.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package com.usky.utils;
  2. import com.usky.entity.sys.SysUserDTO;
  3. import org.apache.shiro.SecurityUtils;
  4. import org.apache.shiro.crypto.SecureRandomNumberGenerator;
  5. import org.apache.shiro.session.Session;
  6. import org.apache.shiro.subject.PrincipalCollection;
  7. import org.apache.shiro.subject.SimplePrincipalCollection;
  8. import org.apache.shiro.subject.Subject;
  9. import org.springframework.beans.BeanUtils;
  10. public class ShiroUtils {
  11. public static Subject getSubject() {
  12. return SecurityUtils.getSubject();
  13. }
  14. public static Session getSession() {
  15. return SecurityUtils.getSubject().getSession();
  16. }
  17. public static void logout() {
  18. getSubject().logout();
  19. }
  20. public static SysUserDTO getSysUser() {
  21. SysUserDTO user = null;
  22. Object obj = getSubject().getPrincipal();
  23. if (null != null) {
  24. user = new SysUserDTO();
  25. BeanUtils.copyProperties(user,obj);
  26. }
  27. return user;
  28. }
  29. public static void setSysUser(SysUserDTO user) {
  30. Subject subject = getSubject();
  31. PrincipalCollection principalCollection = subject.getPrincipals();
  32. String realmName = principalCollection.getRealmNames().iterator().next();
  33. PrincipalCollection newPrincipalCollection = new SimplePrincipalCollection(user, realmName);
  34. // 重新加载Principal
  35. subject.runAs(newPrincipalCollection);
  36. }
  37. public static Long getUserId() {
  38. return getSysUser().getUserId();
  39. }
  40. public static String getLoginName() {
  41. return getSysUser().getLoginName();
  42. }
  43. public static String getIp() {
  44. return getSubject().getSession().getHost();
  45. }
  46. public static String getSessionId() {
  47. return String.valueOf(getSubject().getSession().getId());
  48. }
  49. /**
  50. * 生成随机盐
  51. */
  52. public static String randomSalt() {
  53. // 一个Byte占两个字节,此处生成的3字节,字符串长度为6
  54. SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();
  55. String hex = secureRandom.nextBytes(3).toHex();
  56. return hex;
  57. }
  58. }