后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.8 KiB

  1. package com.iformall.shiro;
  2. import javax.annotation.Resource;
  3. import com.iformall.common.ErrorCode;
  4. import com.iformall.enums.EnumMallUserStatus;
  5. import com.iformall.service.MallUserInfoService;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.apache.shiro.SecurityUtils;
  8. import org.apache.shiro.authc.*;
  9. import org.apache.shiro.authz.AuthorizationInfo;
  10. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  11. import org.apache.shiro.realm.AuthorizingRealm;
  12. import org.apache.shiro.session.Session;
  13. import org.apache.shiro.subject.PrincipalCollection;
  14. import org.apache.shiro.util.ByteSource;
  15. import com.iformall.domain.po.MallUserInfo;
  16. import java.util.Set;
  17. /**
  18. * Created by yangqj on 2017/4/21.
  19. */
  20. public class MyShiroRealm extends AuthorizingRealm {
  21. @Resource
  22. private MallUserInfoService userService;
  23. //授权
  24. @Override
  25. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
  26. MallUserInfo user= (MallUserInfo) SecurityUtils.getSubject().getPrincipal();
  27. Set<String> permissionSet = userService.getUserPermissions(user, true);
  28. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
  29. info.setStringPermissions(permissionSet);
  30. return info;
  31. }
  32. //认证
  33. @Override
  34. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  35. //获取用户的输入的账号.
  36. String username = (String)token.getPrincipal();
  37. MallUserInfo user = userService.getByUsername(username);
  38. if(user == null) {
  39. throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage());
  40. }
  41. if(user.getStatus()==null ||
  42. !EnumMallUserStatus.VALID.getCode().equals(user.getStatus())) {//用户被禁用
  43. throw new DisabledAccountException(ErrorCode.USER_IS_LOCKED.getMessage());
  44. }
  45. SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
  46. user, //用户
  47. user.getPassword(), //密码
  48. ByteSource.Util.bytes(username),
  49. getName() //realm name
  50. );
  51. // 当验证都通过后,把用户信息放在session里
  52. Session session = SecurityUtils.getSubject().getSession();
  53. session.setAttribute(UserSession.userInfo, user);
  54. session.setAttribute(UserSession.userId, user.getId());
  55. session.setAttribute(UserSession.tenantId, user.getTenantId());
  56. return authenticationInfo;
  57. }
  58. /**
  59. * 指定principalCollection 清除
  60. */
  61. /* public void clearCachedAuthorizationInfo(PrincipalCollection principalCollection) {
  62. SimplePrincipalCollection principals = new SimplePrincipalCollection(
  63. principalCollection, getName());
  64. super.clearCachedAuthorizationInfo(principals);
  65. }
  66. */
  67. }