TokenGranterBuilder.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package jnpf.granter;
  2. import jnpf.base.UserInfo;
  3. import jnpf.config.JnpfOauthConfig;
  4. import jnpf.constant.MsgCode;
  5. import jnpf.consts.AuthConsts;
  6. import jnpf.exception.LoginException;
  7. import jnpf.util.UserProvider;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Component;
  10. import java.util.Map;
  11. import java.util.concurrent.ConcurrentHashMap;
  12. /**
  13. *
  14. * @author JNPF开发平台组
  15. * @copyright 引迈信息技术有限公司
  16. */
  17. @Component
  18. public class TokenGranterBuilder {
  19. @Autowired
  20. private JnpfOauthConfig oauthConfig;
  21. private final Map<String, TokenGranter> granterPool = new ConcurrentHashMap<>();
  22. public TokenGranterBuilder(Map<String, TokenGranter> granterPool) {
  23. granterPool.forEach(this.granterPool::put);
  24. }
  25. /**
  26. * 获取TokenGranter
  27. *
  28. * @param grantType 授权类型
  29. * @return ITokenGranter
  30. */
  31. public TokenGranter getGranter(String grantType) throws LoginException {
  32. TokenGranter tokenGranter = null;
  33. // 内部登录需要放行
  34. if(!oauthConfig.getSsoEnabled() || "tempuser".equalsIgnoreCase(grantType)) {
  35. tokenGranter = granterPool.get(grantType);
  36. }
  37. if(tokenGranter == null){
  38. //URL匹配
  39. for (TokenGranter value : granterPool.values()) {
  40. if(value.requiresAuthentication()){
  41. tokenGranter = value;
  42. break;
  43. }
  44. }
  45. }
  46. if(tokenGranter == null){
  47. if(oauthConfig.getSsoEnabled()) {
  48. throw new LoginException(MsgCode.LOG111.get());
  49. }else{
  50. throw new LoginException(MsgCode.LOG112.get());
  51. }
  52. }
  53. return tokenGranter;
  54. }
  55. /**
  56. * 获取当前登录用户的TokenGranter
  57. * @return
  58. * @throws LoginException
  59. */
  60. public TokenGranter getGranterByLogin(String grandType) {
  61. if(grandType == null || grandType.isEmpty()){
  62. UserInfo userInfo = UserProvider.getUser();
  63. if(userInfo.getGrantType() != null){
  64. grandType = userInfo.getGrantType();
  65. }else {
  66. grandType = AuthConsts.GRANT_TYPE_PASSWORD;
  67. }
  68. }
  69. return granterPool.get(grandType);
  70. }
  71. }