caiaa vor 1 Jahr
Ursprung
Commit
ae0b010e58
26 geänderte Dateien mit 383 neuen und 133 gelöschten Zeilen
  1. 10 0
      pom.xml
  2. 19 0
      src/main/java/com/dragon/tj/portal/auth/client/DcucAuthClient.java
  3. 13 0
      src/main/java/com/dragon/tj/portal/auth/client/DcucUserClient.java
  4. 37 0
      src/main/java/com/dragon/tj/portal/auth/config/RetrofitConfig.java
  5. 20 8
      src/main/java/com/dragon/tj/portal/auth/config/WebSecurityConfig.java
  6. 0 1
      src/main/java/com/dragon/tj/portal/auth/controller/SsoController.java
  7. 26 0
      src/main/java/com/dragon/tj/portal/auth/controller/UserController.java
  8. 13 0
      src/main/java/com/dragon/tj/portal/auth/model/AuthReq.java
  9. 16 0
      src/main/java/com/dragon/tj/portal/auth/model/AuthResult.java
  10. 35 0
      src/main/java/com/dragon/tj/portal/auth/model/RR.java
  11. 4 1
      src/main/java/com/dragon/tj/portal/auth/service/MyUserDetailsByNameServiceWrapper.java
  12. 9 26
      src/main/java/com/dragon/tj/portal/auth/service/MyUserDetailsService.java
  13. 90 0
      src/main/java/com/dragon/tj/portal/auth/service/SysPermissionService.java
  14. 4 0
      src/main/java/com/dragon/tj/portal/auth/service/TokenService.java
  15. 8 0
      src/main/java/com/dragon/tj/portal/auth/util/SecurityUtils.java
  16. 0 21
      src/main/java/com/dragon/tj/portal/auth/web/controller/SysDeptController.java
  17. 0 21
      src/main/java/com/dragon/tj/portal/auth/web/controller/SysMenuController.java
  18. 0 21
      src/main/java/com/dragon/tj/portal/auth/web/controller/SysRoleController.java
  19. 0 21
      src/main/java/com/dragon/tj/portal/auth/web/controller/SysUserController.java
  20. 1 0
      src/main/java/com/dragon/tj/portal/auth/web/service/SysUserService.java
  21. 43 1
      src/main/java/com/dragon/tj/portal/auth/web/service/impl/SysUserServiceImpl.java
  22. 14 9
      src/main/java/com/dragon/tj/portal/common/base/R.java
  23. 8 0
      src/main/resources/application-dev.properties
  24. 5 2
      src/main/resources/application-local.properties
  25. 3 0
      src/main/resources/application-prod.properties
  26. 5 1
      src/main/resources/application.properties

+ 10 - 0
pom.xml

@@ -43,6 +43,16 @@
             <artifactId>jjwt</artifactId>
             <version>0.9.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.squareup.retrofit2</groupId>
+            <artifactId>retrofit</artifactId>
+            <version>2.9.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.retrofit2</groupId>
+            <artifactId>converter-jackson</artifactId>
+            <version>2.9.0</version>
+        </dependency>
 
 
         <dependency>

+ 19 - 0
src/main/java/com/dragon/tj/portal/auth/client/DcucAuthClient.java

@@ -0,0 +1,19 @@
+package com.dragon.tj.portal.auth.client;
+
+import com.dragon.tj.portal.auth.model.AuthReq;
+import com.dragon.tj.portal.auth.model.AuthResult;
+import com.dragon.tj.portal.auth.model.RR;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.Header;
+import retrofit2.http.POST;
+
+import java.util.List;
+
+public interface DcucAuthClient {
+
+    @POST("auth-service/v3/auths/functions")
+    Call<RR<List<AuthResult>>> getAuthFunctions(
+            @Header("appCode") String appCode, @Header("idcard") String idCard,
+            @Body AuthReq body);
+}

+ 13 - 0
src/main/java/com/dragon/tj/portal/auth/client/DcucUserClient.java

@@ -0,0 +1,13 @@
+package com.dragon.tj.portal.auth.client;
+
+import com.dragon.tj.portal.auth.model.RR;
+import com.dragon.tj.portal.auth.web.entity.SysUser;
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+
+public interface DcucUserClient {
+
+    @GET("user-service/v1/users/{idCard}")
+    Call<RR<SysUser>> getUserInfo(@Path("idCard") String idCard);
+}

+ 37 - 0
src/main/java/com/dragon/tj/portal/auth/config/RetrofitConfig.java

@@ -0,0 +1,37 @@
+package com.dragon.tj.portal.auth.config;
+
+import com.alibaba.fastjson.support.retrofit.Retrofit2ConverterFactory;
+import com.dragon.tj.portal.auth.client.DcucAuthClient;
+import com.dragon.tj.portal.auth.client.DcucUserClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import retrofit2.Retrofit;
+import retrofit2.converter.jackson.JacksonConverterFactory;
+
+@Configuration
+public class RetrofitConfig {
+    @Value("${client.dcuc.user.url}")
+    private String dcucUserUrl;
+
+    @Value("${client.dcuc.auth.url}")
+    private String dcucAuthUrl;
+
+    @Bean
+    public DcucUserClient dcucUserClient() {
+        Retrofit retrofit = new Retrofit.Builder()
+                .baseUrl(dcucUserUrl)
+                .addConverterFactory(JacksonConverterFactory.create())
+                .build();
+        return retrofit.create(DcucUserClient.class);
+    }
+
+    @Bean
+    public DcucAuthClient dcucAuthClient() {
+        Retrofit retrofit = new Retrofit.Builder()
+                .baseUrl(dcucAuthUrl)
+                .addConverterFactory(Retrofit2ConverterFactory.create())
+                .build();
+        return retrofit.create(DcucAuthClient.class);
+    }
+}

+ 20 - 8
src/main/java/com/dragon/tj/portal/auth/config/WebSecurityConfig.java

@@ -19,9 +19,11 @@ import org.springframework.security.cas.web.CasAuthenticationFilter;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
+import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.web.AuthenticationEntryPoint;
 import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
 
 @Configuration
 @EnableWebSecurity
@@ -35,6 +37,15 @@ public class WebSecurityConfig {
     @Value("${cas.service.url}")
     private String casServiceUrl;
 
+    @Value("${cas.filter.url}")
+    private String casFilterUrl;
+
+    @Value("${cas.target.url}")
+    private String casTargetUrl;
+
+    @Value("${cas.failure.url}")
+    private String casFailureUrl;
+
     @Autowired
     private ServletWebServerApplicationContext context;
 
@@ -49,14 +60,15 @@ public class WebSecurityConfig {
     private static String whiteListSplit = ",";
 
     /**
-    *
-    *白名单
-    */
+     *
+     *白名单
+     */
     static {
         whiteList.append("/test/login" + whiteListSplit);
         whiteList.append("/subscribe/*" + whiteListSplit);
         whiteList.append("/test/test1" + whiteListSplit);
     }
+
     @Bean
     public WebSecurityCustomizer webSecurityCustomizer() {
 
@@ -75,8 +87,8 @@ public class WebSecurityConfig {
                 .authorizeRequests()
                 .antMatchers(whiteList.toString().split(whiteListSplit)).permitAll()
                 .anyRequest().authenticated()
-                // .and()
-                // .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+                .and()
+                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                 .and()
                 .exceptionHandling(exceptions -> exceptions.authenticationEntryPoint(authenticationEntryPoint()))
                 .addFilter(casAuthenticationFilter())
@@ -98,13 +110,13 @@ public class WebSecurityConfig {
 
     public CasAuthenticationFilter casAuthenticationFilter() {
         CasAuthenticationFilter filter = new CasAuthenticationFilter();
-        filter.setFilterProcessesUrl("/sso/login");
-        // filter.setSessionAuthenticationStrategy(new SessionFixationProtectionStrategy());
+        filter.setFilterProcessesUrl(casFilterUrl);
+        filter.setAuthenticationFailureHandler(new SimpleUrlAuthenticationFailureHandler(casFailureUrl));
 
         CasAuthenticationProvider casAuthenticationProvider = casAuthenticationProvider(userDetailsService);
         filter.setAuthenticationManager(new ProviderManager(casAuthenticationProvider));
 
-        mySimpleUrlAuthenticationSuccessHandler.setDefaultTargetUrl("http://localhost:8081/#/?token=");
+        mySimpleUrlAuthenticationSuccessHandler.setDefaultTargetUrl(casTargetUrl);
         filter.setAuthenticationSuccessHandler(mySimpleUrlAuthenticationSuccessHandler);
 
         return filter;

+ 0 - 1
src/main/java/com/dragon/tj/portal/auth/controller/SsoController.java

@@ -1,6 +1,5 @@
 package com.dragon.tj.portal.auth.controller;
 
-
 import com.dragon.tj.portal.auth.model.LoginUser;
 import com.dragon.tj.portal.auth.service.TokenService;
 import com.dragon.tj.portal.auth.web.entity.SysUser;

+ 26 - 0
src/main/java/com/dragon/tj/portal/auth/controller/UserController.java

@@ -0,0 +1,26 @@
+package com.dragon.tj.portal.auth.controller;
+
+import com.dragon.tj.portal.auth.model.LoginUser;
+import com.dragon.tj.portal.auth.util.SecurityUtils;
+import com.dragon.tj.portal.common.base.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+    @GetMapping("/info")
+    public R<Map<String, Object>> info(HttpServletRequest request) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        Map<String, Object> data = new HashMap<>(3);
+        data.put("name", loginUser.getUser().getName());
+        data.put("roles", loginUser.getPermissions());
+        return R.ok(data);
+    }
+}

+ 13 - 0
src/main/java/com/dragon/tj/portal/auth/model/AuthReq.java

@@ -0,0 +1,13 @@
+package com.dragon.tj.portal.auth.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class AuthReq {
+    private String appCode;
+    private String idcard;
+}

+ 16 - 0
src/main/java/com/dragon/tj/portal/auth/model/AuthResult.java

@@ -0,0 +1,16 @@
+package com.dragon.tj.portal.auth.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author D
+ */
+@Getter
+@Setter
+public class AuthResult {
+    private String code;
+    private List<AuthResult> nextCode;
+}

+ 35 - 0
src/main/java/com/dragon/tj/portal/auth/model/RR.java

@@ -0,0 +1,35 @@
+package com.dragon.tj.portal.auth.model;
+
+import java.io.Serializable;
+
+public class RR<T> implements Serializable {
+    private static final long serialVersionUID = 5305164962288509994L;
+
+    private String statusCode;
+    private String message;
+    private T result;
+
+    public String getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(String statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getResult() {
+        return result;
+    }
+
+    public void setResult(T result) {
+        this.result = result;
+    }
+}

+ 4 - 1
src/main/java/com/dragon/tj/portal/auth/service/MyUserDetailsByNameServiceWrapper.java

@@ -15,6 +15,9 @@ import java.util.Objects;
 public class MyUserDetailsByNameServiceWrapper<T extends Authentication>
         implements AuthenticationUserDetailsService<T>, InitializingBean {
 
+    private static final String KEY = "gmsfzh";
+
+
     private UserDetailsService userDetailsService;
 
     /**
@@ -48,7 +51,7 @@ public class MyUserDetailsByNameServiceWrapper<T extends Authentication>
             CasAssertionAuthenticationToken casAssertionAuthenticationToken = (CasAssertionAuthenticationToken) authentication;
             Map<String, Object> attributes = casAssertionAuthenticationToken.getAssertion().getPrincipal().getAttributes();
             if (!Objects.isNull(attributes)) {
-                Object idCard = attributes.get("gmsfzh");
+                Object idCard = attributes.get(KEY);
                 if (!Objects.isNull(idCard)) {
                     return this.userDetailsService.loadUserByUsername(String.valueOf(idCard));
                 }

+ 9 - 26
src/main/java/com/dragon/tj/portal/auth/service/MyUserDetailsService.java

@@ -11,10 +11,9 @@ import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 
-import java.util.Arrays;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * 用户验证处理
@@ -27,37 +26,21 @@ public class MyUserDetailsService implements UserDetailsService {
 
     @Autowired
     private SysUserService userService;
+    @Autowired
+    private SysPermissionService sysPermissionService;
+
 
     @Override
     public UserDetails loadUserByUsername(String idCard) throws UsernameNotFoundException {
-        SysUser user = userService.getBaseMapper().selectById(idCard);
+        SysUser user = userService.getUserById(idCard);
         if (Objects.isNull(user)) {
-            LOGGER.info("登录用户:{} 不存在,需调用用户管理服务-获取警员详情接口", idCard);
-            // TODO
-            /*try (HttpResponse response = HttpRequest.post("http://17.22.60.108:8870/dcuc/api/user-service/v3/users/police/" + idcard)
-                    .contentType(MediaType.APPLICATION_JSON_VALUE)
-                    .execute()) {
-                if (response.isOk()) {
-                    String body = response.body();
-                    if (StringUtils.isNoneBlank(body)) {
-                        JSONObject jsonObject = JSONUtil.parseObj(body);
-                        if ("200".equals(jsonObject.get("statusCode"))) {
-                            // JSONUtil.wrap()
-                        }
-                    }
-                }
-            }*/
-
-            // throw new ServiceException("登录用户:" + username + " 不存在");
+            throw new UsernameNotFoundException(idCard);
         }
-
         return createLoginUser(user);
     }
 
-    public UserDetails createLoginUser(SysUser user) {
-        // TODO 调用权限管理服务-功能级鉴权接口
-        List<String> permissions = Arrays.asList("gzt", "yyzx");
-        return new LoginUser(user.getIdcard(), user.getOrgCode(), user, new HashSet<>(permissions));
-        // return new LoginUser(user.getIdcard(), user.getOrgCode(), user, menuService.selectMenuPermsByIdCard(user.getIdcard()));
+    public UserDetails createLoginUser(SysUser sysUser) {
+        Set<String> permissions = sysPermissionService.getMenuPermission(sysUser);
+        return new LoginUser(sysUser.getIdcard(), sysUser.getOrgCode(), sysUser, new HashSet<>(permissions));
     }
 }

+ 90 - 0
src/main/java/com/dragon/tj/portal/auth/service/SysPermissionService.java

@@ -0,0 +1,90 @@
+package com.dragon.tj.portal.auth.service;
+
+import com.dragon.tj.portal.auth.client.DcucAuthClient;
+import com.dragon.tj.portal.auth.model.AuthReq;
+import com.dragon.tj.portal.auth.model.AuthResult;
+import com.dragon.tj.portal.auth.model.RR;
+import com.dragon.tj.portal.auth.web.entity.SysUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import retrofit2.Call;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * 用户权限处理
+ *
+ * @author tienchin
+ */
+@Component
+public class SysPermissionService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SysPermissionService.class);
+
+    @Autowired
+    private DcucAuthClient dcucAuthClient;
+
+    @Value("${app.code}")
+    private String appCode;
+
+    /**
+     * 获取数据权限
+     *
+     * @param user 用户信息
+     * @return 数据权限信息
+     */
+    public Set<String> getDataPermission(SysUser user) {
+        return new HashSet<>();
+    }
+
+    /**
+     * 获取菜单权限
+     *
+     * @param user 用户信息
+     * @return 菜单权限信息
+     */
+    public Set<String> getMenuPermission(SysUser user) {
+        Set<String> perms = new HashSet<>();
+        String idCard = user.getIdcard();
+        try {
+            LOGGER.info("登录用户[{}]调用权限管理服务-功能级鉴权接口", idCard);
+            Call<RR<List<AuthResult>>> call = dcucAuthClient.getAuthFunctions(appCode, idCard, new AuthReq(appCode, idCard));
+            RR<List<AuthResult>> body = call.execute().body();
+            if (Objects.nonNull(body)) {
+                if ("200".equals(body.getStatusCode())) {
+                    List<AuthResult> results = body.getResult();
+                    perms.addAll(extractPermissions(results));
+                } else {
+                    LOGGER.error("登录用户[{}]调用权限管理服务-功能级鉴权接口 出错: {}", idCard, body.getMessage());
+                }
+            } else {
+                LOGGER.error("登录用户[{}]调用权限管理服务-功能级鉴权接口 出错: 返回为空", idCard);
+            }
+        } catch (Exception e) {
+            LOGGER.error("登录用户[{}]调用权限管理服务-功能级鉴权接口 出错", idCard, e);
+        }
+
+        return perms;
+    }
+
+    private List<String> extractPermissions(List<AuthResult> results) {
+        List<String> permissions = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(results)) {
+            for (AuthResult result : results) {
+                permissions.add(result.getCode());
+                List<AuthResult> nextCode = result.getNextCode();
+                if (!CollectionUtils.isEmpty(nextCode)) {
+                    permissions.addAll(extractPermissions(nextCode));
+                }
+            }
+        }
+        return permissions;
+    }
+}

+ 4 - 0
src/main/java/com/dragon/tj/portal/auth/service/TokenService.java

@@ -8,6 +8,8 @@ import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -19,6 +21,7 @@ import java.util.concurrent.TimeUnit;
 
 @Service
 public class TokenService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(TokenService.class);
 
     private static final String TOKEN_PREFIX = "Bearer ";
     public static final String LOGIN_USER_KEY = "login_user_key";
@@ -86,6 +89,7 @@ public class TokenService {
      */
     public String createToken(LoginUser loginUser) {
         String token = IdUtil.fastUUID();
+        LOGGER.info("token info: [{}]: [{}]", loginUser.getIdCard(), token);
         loginUser.setToken(token);
         // setUserAgent(loginUser);
         refreshToken(loginUser);

+ 8 - 0
src/main/java/com/dragon/tj/portal/auth/util/SecurityUtils.java

@@ -1,5 +1,6 @@
 package com.dragon.tj.portal.auth.util;
 
+import com.dragon.tj.portal.auth.model.LoginUser;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
@@ -12,4 +13,11 @@ public class SecurityUtils {
         return SecurityContextHolder.getContext().getAuthentication();
     }
 
+
+    /**
+     * 获取用户
+     **/
+    public static LoginUser getLoginUser() {
+        return (LoginUser) getAuthentication().getPrincipal();
+    }
 }

+ 0 - 21
src/main/java/com/dragon/tj/portal/auth/web/controller/SysDeptController.java

@@ -1,21 +0,0 @@
-package com.dragon.tj.portal.auth.web.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 部门表 前端控制器
- * </p>
- *
- * @author caiaa
- * @since 2023-06-23
- */
-@RestController
-@RequestMapping("/sysDept")
-public class SysDeptController {
-
-}
-

+ 0 - 21
src/main/java/com/dragon/tj/portal/auth/web/controller/SysMenuController.java

@@ -1,21 +0,0 @@
-package com.dragon.tj.portal.auth.web.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 菜单信息表 前端控制器
- * </p>
- *
- * @author caiaa
- * @since 2023-06-23
- */
-@RestController
-@RequestMapping("/sysMenu")
-public class SysMenuController {
-
-}
-

+ 0 - 21
src/main/java/com/dragon/tj/portal/auth/web/controller/SysRoleController.java

@@ -1,21 +0,0 @@
-package com.dragon.tj.portal.auth.web.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 角色信息表 前端控制器
- * </p>
- *
- * @author caiaa
- * @since 2023-06-23
- */
-@RestController
-@RequestMapping("/sysRole")
-public class SysRoleController {
-
-}
-

+ 0 - 21
src/main/java/com/dragon/tj/portal/auth/web/controller/SysUserController.java

@@ -1,21 +0,0 @@
-package com.dragon.tj.portal.auth.web.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 用户信息表 前端控制器
- * </p>
- *
- * @author caiaa
- * @since 2023-06-23
- */
-@RestController
-@RequestMapping("/sysUser")
-public class SysUserController {
-
-}
-

+ 1 - 0
src/main/java/com/dragon/tj/portal/auth/web/service/SysUserService.java

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SysUserService extends IService<SysUser> {
 
+    SysUser getUserById(String idCard);
 }

+ 43 - 1
src/main/java/com/dragon/tj/portal/auth/web/service/impl/SysUserServiceImpl.java

@@ -1,10 +1,18 @@
 package com.dragon.tj.portal.auth.web.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dragon.tj.portal.auth.client.DcucUserClient;
+import com.dragon.tj.portal.auth.model.RR;
 import com.dragon.tj.portal.auth.web.entity.SysUser;
 import com.dragon.tj.portal.auth.web.mapper.SysUserMapper;
 import com.dragon.tj.portal.auth.web.service.SysUserService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import retrofit2.Call;
+
+import java.util.Objects;
 
 /**
  * <p>
@@ -16,5 +24,39 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SysUserServiceImpl.class);
+
+    @Autowired
+    private DcucUserClient dcucUserClient;
+
+    @Override
+    public SysUser getUserById(String idCard) {
+        SysUser sysUser = getById(idCard);
+        if (Objects.isNull(sysUser)) {
+            LOGGER.info("登录用户[{}]调用用户管理服务-获取警员详情接口", idCard);
+            sysUser = getUserFromDcuc(idCard);
+        }
+        return sysUser;
+    }
+
+    public SysUser getUserFromDcuc(String idCard) {
+        SysUser sysUser = null;
+        try {
+            Call<RR<SysUser>> call = dcucUserClient.getUserInfo(idCard);
+            RR<SysUser> body = call.execute().body();
+            if (Objects.nonNull(body)) {
+                if ("200".equals(body.getStatusCode())) {
+                    sysUser = body.getResult();
+                } else {
+                    LOGGER.error("登录用户[{}]调用用户管理服务-获取警员详情接口 出错: {}", idCard, body.getMessage());
+                }
+            } else {
+                LOGGER.error("登录用户[{}]调用用户管理服务-获取警员详情接口 出错: 返回为空", idCard);
+            }
+        } catch (Exception e) {
+            LOGGER.error("登录用户[{}]调用用户管理服务-获取警员详情接口 出错", idCard, e);
+        }
+        return sysUser;
+    }
 
 }

+ 14 - 9
src/main/java/com/dragon/tj/portal/common/base/R.java

@@ -19,9 +19,14 @@
 
 package com.dragon.tj.portal.common.base;
 
-import com.dragon.tj.portal.common.constants.CommonConstants;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
 import lombok.experimental.Accessors;
+import org.springframework.http.HttpStatus;
 
 import java.io.Serializable;
 
@@ -52,23 +57,23 @@ public class R<T> implements Serializable {
     private T data;
 
     public static <T> R<T> ok() {
-        return restResult(null, CommonConstants.SUCCESS, null);
+        return restResult(null, HttpStatus.OK.value(), null);
     }
 
     public static <T> R<T> ok(T data) {
-        return restResult(data, CommonConstants.SUCCESS, null);
+        return restResult(data, HttpStatus.OK.value(), null);
     }
 
     public static <T> R<T> ok(T data, String msg) {
-        return restResult(data, CommonConstants.SUCCESS, msg);
+        return restResult(data, HttpStatus.OK.value(), msg);
     }
 
     public static <T> R<T> failed() {
-        return restResult(null, CommonConstants.FAIL, null);
+        return restResult(null, HttpStatus.INTERNAL_SERVER_ERROR.value(), null);
     }
 
     public static <T> R<T> failed(String msg) {
-        return restResult(null, CommonConstants.FAIL, msg);
+        return restResult(null, HttpStatus.INTERNAL_SERVER_ERROR.value(), msg);
     }
 
     public static <T> R<T> failed(ResultError resultError) {
@@ -76,11 +81,11 @@ public class R<T> implements Serializable {
     }
 
     public static <T> R<T> failed(T data) {
-        return restResult(data, CommonConstants.FAIL, null);
+        return restResult(data, HttpStatus.INTERNAL_SERVER_ERROR.value(), null);
     }
 
     public static <T> R<T> failed(T data, String msg) {
-        return restResult(data, CommonConstants.FAIL, msg);
+        return restResult(data, HttpStatus.INTERNAL_SERVER_ERROR.value(), msg);
     }
 
     private static <T> R<T> restResult(T data, int code, String msg) {

+ 8 - 0
src/main/resources/application-dev.properties

@@ -1,3 +1,4 @@
+###########spring#############
 spring.datasource.url=jdbc:mysql://portal-tj.com:3306/portal?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
 #spring.datasource.url=jdbc:mysql://portal-tj.com:3306/portal?characterEncoding=utf8
 spring.datasource.username=portal
@@ -28,6 +29,13 @@ cas.base.url=http://localhost:8080/cas
 cas.login.url=${cas.base.url}/login
 cas.logout.url=${cas.base.url}/logout
 cas.service.url=http://localhost:8081/api/sso/login
+cas.filter.url=/sso/login
+cas.target.url=http://localhost:8081/#/auth-redirect?token=
+cas.failure.url=http://localhost:8081/#/401
+
+########## dcuc api ################
+client.dcuc.user.url=http://localhost:8086/dcuc/user/api/
+client.dcuc.auth.url=http://localhost:8086/dcuc/auth/api/
 
 logging.level.org.springframework.security=trace
 logging.level.org.jasig.cas=trace

+ 5 - 2
src/main/resources/application-local.properties

@@ -16,9 +16,9 @@ spring.kafka.consumer.auto-commit-interval=100
 spring.kafka.listener.ack-mode=manual
 ###########redis#############
 spring.redis.host=127.0.0.1
-#端口号 默认6379
+#\u7AEF\u53E3\u53F7 \u9ED8\u8BA46379
 spring.redis.port=6379
-#redis配置的密码
+#redis\u914D\u7F6E\u7684\u5BC6\u7801
 #spring.redis.password=123456
 
 ##########cas################
@@ -26,6 +26,9 @@ cas.base.url=http://localhost:8080/cas
 cas.login.url=${cas.base.url}/login
 cas.logout.url=${cas.base.url}/logout
 cas.service.url=http://localhost:8081/api/sso/login
+cas.target.url=http://localhost:8081/#/?token=
+cas.filter.url=/sso/login
+cas.failure.url=http://localhost:8081/#/401
 
 logging.level.org.springframework.security=trace
 logging.level.org.jasig.cas=trace

+ 3 - 0
src/main/resources/application-prod.properties

@@ -0,0 +1,3 @@
+########## dcuc api ################
+client.dcuc.user.url=http://17.22.60.108:8870/dcuc/api/
+client.dcuc.auth.url=http://17.22.60.108:8871/dcucauth/api/

+ 5 - 1
src/main/resources/application.properties

@@ -1,9 +1,13 @@
 spring.profiles.active=dev
 
+###########app################
+app.code=A-120000200000-9999
+
 ########### token #############
 # \u4EE4\u724C\u81EA\u5B9A\u4E49\u6807\u8BC6
 token.header=Authorization
 # \u4EE4\u724C\u5BC6\u94A5
 token.secret=3a2ffb600242ac110004
 # \u4EE4\u724C\u6709\u6548\u671F\uFF08\u9ED8\u8BA412\u5C0F\u65F6\uFF09
-token.expireTime=720
+token.expireTime=720
+