OAuth2Realm.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package io.renren.modules.sys.oauth2;
  2. import io.renren.modules.sys.entity.SysUserEntity;
  3. import io.renren.modules.sys.entity.SysUserTokenEntity;
  4. import io.renren.modules.sys.service.ShiroService;
  5. import org.apache.shiro.authc.*;
  6. import org.apache.shiro.authz.AuthorizationInfo;
  7. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  8. import org.apache.shiro.realm.AuthorizingRealm;
  9. import org.apache.shiro.subject.PrincipalCollection;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Component;
  12. import java.util.Set;
  13. /**
  14. * 认证
  15. *
  16. * @author chenshun
  17. * @email sunlightcs@gmail.com
  18. * @date 2017-05-20 14:00
  19. */
  20. @Component
  21. public class OAuth2Realm extends AuthorizingRealm {
  22. @Autowired
  23. private ShiroService shiroService;
  24. @Override
  25. public boolean supports(AuthenticationToken token) {
  26. return token instanceof OAuth2Token;
  27. }
  28. /**
  29. * 授权(验证权限时调用)
  30. */
  31. @Override
  32. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  33. SysUserEntity user = (SysUserEntity)principals.getPrimaryPrincipal();
  34. Long userId = user.getUserId();
  35. //用户权限列表
  36. Set<String> permsSet = shiroService.getUserPermissions(userId);
  37. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
  38. info.setStringPermissions(permsSet);
  39. return info;
  40. }
  41. /**
  42. * 认证(登录时调用)
  43. */
  44. @Override
  45. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  46. String accessToken = (String) token.getPrincipal();
  47. //根据accessToken,查询用户信息
  48. SysUserTokenEntity tokenEntity = shiroService.queryByToken(accessToken);
  49. //token失效
  50. if(tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()){
  51. throw new IncorrectCredentialsException("token失效,请重新登录");
  52. }
  53. //查询用户信息
  54. SysUserEntity user = shiroService.queryUser(tokenEntity.getUserId());
  55. //账号锁定
  56. if(user.getStatus() == 0){
  57. throw new LockedAccountException("账号已被锁定,请联系管理员");
  58. }
  59. SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, accessToken, getName());
  60. return info;
  61. }
  62. }