JWTShiroRealm.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package com.yaozhitech.spring5.jwt;
  2. import org.apache.shiro.authc.AuthenticationException;
  3. import org.apache.shiro.authc.AuthenticationInfo;
  4. import org.apache.shiro.authc.AuthenticationToken;
  5. import org.apache.shiro.authc.SimpleAuthenticationInfo;
  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 com.yaozhitech.spring5.dto.UserDto;
  11. import com.yaozhitech.spring5.service.UserService;
  12. import com.yaozhitech.spring5.utils.JwtUtils;
  13. /**
  14. * 自定义身份认证
  15. * 基于HMAC( 散列消息认证码)的控制域
  16. */
  17. public class JWTShiroRealm extends AuthorizingRealm {
  18. protected UserService userService;
  19. public JWTShiroRealm(UserService userService){
  20. this.userService = userService;
  21. this.setCredentialsMatcher(new JWTCredentialsMatcher());
  22. }
  23. @Override
  24. public boolean supports(AuthenticationToken token) {
  25. return token instanceof JWTToken;
  26. }
  27. /**
  28. * 认证信息.(身份验证) : Authentication 是用来验证用户身份
  29. * 默认使用此方法进行用户名正确与否验证,错误抛出异常即可。
  30. */
  31. @Override
  32. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
  33. JWTToken jwtToken = (JWTToken) authcToken;
  34. String token = jwtToken.getToken();
  35. UserDto user = userService.getJwtTokenInfo(JwtUtils.getUsername(token));
  36. if(user == null)
  37. throw new AuthenticationException("token过期,请重新登录");
  38. SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, user.getSalt(), "jwtRealm");
  39. return authenticationInfo;
  40. }
  41. @Override
  42. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  43. return new SimpleAuthorizationInfo();
  44. }
  45. }