IamberryRealm.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.iamberry.wechat.realm;
  2. import com.iamberry.sys.Admin;
  3. import com.iamberry.wechat.face.sys.SysService;
  4. import org.apache.shiro.authc.*;
  5. import org.apache.shiro.authz.AuthorizationInfo;
  6. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  7. import org.apache.shiro.realm.AuthorizingRealm;
  8. import org.apache.shiro.subject.PrincipalCollection;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Component;
  13. import java.util.HashSet;
  14. import java.util.List;
  15. import java.util.Set;
  16. public class IamberryRealm extends AuthorizingRealm {
  17. private static final Logger LOGGER = LoggerFactory.getLogger(IamberryRealm.class);
  18. @Autowired
  19. private SysService sysService;
  20. /**
  21. * 认证
  22. * @param token
  23. * @return
  24. * @throws AuthenticationException
  25. */
  26. @Override
  27. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  28. if (LOGGER.isDebugEnabled()) {
  29. LOGGER.info(token.getPrincipal() + " - 申请认证...");
  30. }
  31. UsernamePasswordToken passwordToken = (UsernamePasswordToken) token;
  32. // 查找用户信息
  33. Admin temp = new Admin();
  34. temp.setAdminAccount(passwordToken.getUsername());
  35. Admin admin = sysService.get(temp);
  36. if (admin == null) {
  37. throw new UnknownAccountException("NOT_ADMIN");
  38. }
  39. if (admin.getAdminStatus() == 2) {
  40. throw new LockedAccountException("ADMIN_LOCKED");
  41. }
  42. // 返回信息
  43. return new SimpleAuthenticationInfo(admin, admin.getAdminPassword().toUpperCase(), getName());
  44. }
  45. /**
  46. * 授权(权限认证 )
  47. * @param principals
  48. * @return
  49. */
  50. @Override
  51. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  52. if (LOGGER.isDebugEnabled()) {
  53. LOGGER.info(principals.toString() + " - 申请授权...");
  54. }
  55. // 获取登录时输入的用户名
  56. Admin admin = (Admin) principals.getPrimaryPrincipal();
  57. // 根据id,查询用户的权限
  58. List<String> permissions = sysService.listSymbolByRule(admin.getRuleId());
  59. // 封装权限
  60. Set<String> perms = new HashSet<>(permissions);
  61. //权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)
  62. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
  63. info.setStringPermissions(perms);
  64. return info;
  65. }
  66. }