UserRealm.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.aijia.peixun.config;
  2. import com.aijia.peixun.entity.User;
  3. import com.aijia.peixun.service.JzPeiXunService;
  4. import com.aijia.peixun.utils.Constants;
  5. import com.alibaba.fastjson.JSONObject;
  6. import org.apache.shiro.SecurityUtils;
  7. import org.apache.shiro.authc.*;
  8. import org.apache.shiro.authz.AuthorizationInfo;
  9. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  10. import org.apache.shiro.realm.AuthorizingRealm;
  11. import org.apache.shiro.session.Session;
  12. import org.apache.shiro.subject.PrincipalCollection;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import java.util.Collection;
  17. import java.util.Objects;
  18. public class UserRealm extends AuthorizingRealm {
  19. private Logger logger = LoggerFactory.getLogger(UserRealm.class);
  20. @Autowired
  21. private JzPeiXunService jzPeiXunService;
  22. @Override
  23. @SuppressWarnings("unchecked")
  24. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  25. Session session = SecurityUtils.getSubject().getSession();
  26. //查询用户的权限
  27. JSONObject permission = (JSONObject) session.getAttribute(Constants.SESSION_USER_PERMISSION);
  28. logger.info("permission的值为:" + permission);
  29. logger.info("本用户权限为:" + permission.get("permissionList"));
  30. //为当前用户设置角色和权限
  31. SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
  32. authorizationInfo.addStringPermissions((Collection<String>) permission.get("permissionList"));
  33. return authorizationInfo;
  34. }
  35. /**
  36. * 验证当前登录的Subject
  37. * LoginController.login()方法中执行Subject.login()时 执行此方法
  38. */
  39. @Override
  40. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
  41. //获取用户的账号名称 -- 手机号
  42. String loginName = (String) authcToken.getPrincipal();
  43. // 获取用户密码
  44. String password = new String((char[]) authcToken.getCredentials());
  45. User user = new User();
  46. //存储用户名
  47. user.setTelephoneno(loginName);
  48. //存储验证码
  49. user.setBackup2(password);
  50. //因为是手机号+短息验证码登录,即使没有此手机号账号,也可以登录,可以为null
  51. // if (user == null) {
  52. // //没找到帐号
  53. // throw new UnknownAccountException();
  54. // }
  55. //交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现
  56. SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
  57. user,
  58. // user.getTelephoneno(),
  59. user.getBackup2(),
  60. //ByteSource.Util.bytes("salt"), salt=username+salt,采用明文访问时,不需要此句
  61. getName()
  62. );
  63. //session中不需要保存密码
  64. // user.remove("password");
  65. //将用户信息放入session中
  66. SecurityUtils.getSubject().getSession().setAttribute(Constants.SESSION_USER_INFO, user);
  67. System.out.println(authenticationInfo);
  68. return authenticationInfo;
  69. }
  70. public static String getUser(){
  71. Session session = SecurityUtils.getSubject().getSession();
  72. JSONObject userInfo = (JSONObject) session.getAttribute(Constants.SESSION_USER_INFO);
  73. if (Objects.isNull(userInfo)) {
  74. return null;
  75. }
  76. return userInfo.getString("username");
  77. }
  78. }