Prechádzať zdrojové kódy

优化权限配置逻辑,在支持数据库配置权限的同时也支持通过配置文件配置

zhouhao 6 rokov pred
rodič
commit
d4b65c8011

+ 22 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-local/src/main/java/org/hswebframework/web/service/authorization/simple/SimpleAuthenticationManager.java

@@ -1,5 +1,7 @@
 package org.hswebframework.web.service.authorization.simple;
 
+import lombok.Getter;
+import lombok.Setter;
 import org.hswebframework.web.authorization.Authentication;
 import org.hswebframework.web.authorization.AuthenticationInitializeService;
 import org.hswebframework.web.authorization.AuthenticationManager;
@@ -25,6 +27,11 @@ public class SimpleAuthenticationManager implements AuthenticationManager {
 
     private AuthenticationInitializeService authenticationInitializeService;
 
+
+    @Setter
+    @Getter
+    private AuthenticationManager parent;
+
     @Autowired
     private UserService userService;
 
@@ -38,6 +45,11 @@ public class SimpleAuthenticationManager implements AuthenticationManager {
         this.authenticationInitializeService = authenticationInitializeService;
     }
 
+    public SimpleAuthenticationManager(AuthenticationInitializeService authenticationInitializeService, AuthenticationManager parent) {
+        this.authenticationInitializeService = authenticationInitializeService;
+        this.parent = parent;
+    }
+
     @Autowired
     public void setAuthenticationInitializeService(AuthenticationInitializeService authenticationInitializeService) {
         this.authenticationInitializeService = authenticationInitializeService;
@@ -45,6 +57,16 @@ public class SimpleAuthenticationManager implements AuthenticationManager {
 
     @Override
     public Authentication authenticate(AuthenticationRequest request) {
+        if (null != parent) {
+            try {
+                Authentication authentication = parent.authenticate(request);
+                if (null != authentication) {
+                    return authentication;
+                }
+            } catch (Exception ignore) {
+                // ignore errors
+            }
+        }
         if (request instanceof PlainTextUsernamePasswordAuthenticationRequest) {
             String username = ((PlainTextUsernamePasswordAuthenticationRequest) request).getUsername();
             String password = ((PlainTextUsernamePasswordAuthenticationRequest) request).getPassword();

+ 29 - 6
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/AuthorizationAutoConfiguration.java

@@ -20,16 +20,18 @@ package org.hswebframework.web.authorization.starter;
 
 import org.hswebframework.web.authorization.AuthenticationInitializeService;
 import org.hswebframework.web.authorization.AuthenticationManager;
-import org.hswebframework.web.authorization.basic.configuration.BasicAuthorizationConfiguration;
+import org.hswebframework.web.authorization.basic.embed.EmbedAuthenticationManager;
 import org.hswebframework.web.authorization.simple.DefaultAuthorizationAutoConfiguration;
 import org.hswebframework.web.service.authorization.simple.SimpleAuthenticationManager;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Primary;
 
 /**
  * @author zhouhao
@@ -41,12 +43,33 @@ import org.springframework.context.annotation.Import;
 @AutoConfigureBefore(value = {
         DefaultAuthorizationAutoConfiguration.class
 }, name = "org.hswebframework.web.authorization.basic.configuration.AuthorizingHandlerAutoConfiguration")
-@Import(BasicAuthorizationConfiguration.class)
 public class AuthorizationAutoConfiguration {
 
-    @Bean
-    public AuthenticationManager authenticationManager(AuthenticationInitializeService authenticationInitializeService) {
-        return new SimpleAuthenticationManager(authenticationInitializeService);
+    @ConditionalOnMissingClass("org.hswebframework.web.authorization.basic.embed.EmbedAuthenticationManager")
+    @Configuration
+    public static class NoEmbedAuthenticationManagerAutoConfiguration {
+        @Bean
+        @Primary
+        public AuthenticationManager authenticationManager(AuthenticationInitializeService authenticationInitializeService) {
+            return new SimpleAuthenticationManager(authenticationInitializeService);
+        }
+
+    }
+
+    @ConditionalOnClass(EmbedAuthenticationManager.class)
+    @Configuration
+    public static class EmbedAuthenticationManagerAutoConfiguration {
+        @Bean
+        public EmbedAuthenticationManager embedAuthenticationManager() {
+            return new EmbedAuthenticationManager();
+        }
+
+        @Bean
+        @Primary
+        public AuthenticationManager authenticationManager(EmbedAuthenticationManager embedAuthenticationManager,
+                                                           AuthenticationInitializeService authenticationInitializeService) {
+            return new SimpleAuthenticationManager(authenticationInitializeService, embedAuthenticationManager);
+        }
     }
 
     @Bean