Browse Source

修改单点登录

zyl 1 month ago
parent
commit
a0d4b4af76

+ 15 - 1
liutongyi-admin/pom.xml

@@ -80,7 +80,8 @@
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <version>2.5.15</version>
                 <configuration>
-                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                    <fork>true</fork>
+                    <includeSystemScope>true</includeSystemScope>
                 </configuration>
                 <executions>
                     <execution>
@@ -99,7 +100,20 @@
                     <warName>${project.artifactId}</warName>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.2.2</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
         </plugins>
+        <resources>
+            <resource>
+                <directory>${project.basedir}/src/main/resources</directory>
+            </resource>
+        </resources>
         <finalName>${project.artifactId}</finalName>
     </build>
 

+ 12 - 0
liutongyi-admin/src/main/java/com/citygis/web/controller/system/SysLoginController.java

@@ -146,4 +146,16 @@ public class SysLoginController {
         singleLoginService.singleLogin(request, response);
     }
 
+    /**
+     * 拿到code ,获取六统一token
+     *
+     * @param code code
+     * @return
+     */
+    @ApiOperation(value = "获取六统一token")
+    @GetMapping("/getLTYToken/{code}")
+    public String getLTYToken(@PathVariable String code) throws IOException {
+        return singleLoginService.getLTYToken(code);
+    }
+
 }

+ 2 - 2
liutongyi-admin/src/main/java/com/citygis/web/service/SingleLoginService.java

@@ -10,11 +10,11 @@ public interface SingleLoginService {
     void singleLogin(HttpServletRequest request, HttpServletResponse response) throws IOException;
 
     /**
-     * 拿到code ,获取用户
+     * 拿到code ,获取六统一token
      *
      * @param code code
      * @return
      */
-    String getUser(String code) throws UnsupportedEncodingException;
+    String getLTYToken(String code) throws UnsupportedEncodingException;
 
 }

+ 25 - 3
liutongyi-admin/src/main/java/com/citygis/web/service/impl/SingleLoginServiceImpl.java

@@ -4,11 +4,17 @@ import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.citygis.framework.web.service.SysLoginService;
+import com.citygis.web.domain.TabUser;
+import com.citygis.web.service.ITabUserService;
 import com.citygis.web.service.SingleLoginService;
+import com.citygis.web.utils.AesUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -44,6 +50,12 @@ public class SingleLoginServiceImpl implements SingleLoginService {
     @Value("${singleLogin.userInfo}")
     private String userInfo;
 
+    @Resource
+    ITabUserService tabUserService;
+
+    @Resource
+    SysLoginService sysLoginService;
+
     @Override
     public void singleLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {
 
@@ -60,15 +72,24 @@ public class SingleLoginServiceImpl implements SingleLoginService {
     }
 
     @Override
-    public String getUser(String code) throws UnsupportedEncodingException {
+    public String getLTYToken(String code) throws UnsupportedEncodingException {
         String accessToken = getAccessToken(code);
-        String user = getUserAccountInfo(accessToken);
-        return "";
+        String userName = getUserAccountInfo(accessToken);
+
+        LambdaQueryWrapper<TabUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TabUser::getName, userName);
+        TabUser one = tabUserService.getOne(wrapper);
+
+        String decryptedPassword = AesUtil.aesDecrypt(one.getPassword());
+
+        String token = sysLoginService.login(userName, decryptedPassword);
+        return token;
     }
 
 
     /**
      * 获取token
+     *
      * @param code
      * @return
      * @throws UnsupportedEncodingException
@@ -110,6 +131,7 @@ public class SingleLoginServiceImpl implements SingleLoginService {
 
     /**
      * 获取用户
+     *
      * @param accessToken
      * @return
      */

+ 6 - 3
liutongyi-admin/src/main/java/com/citygis/web/service/impl/TabUserServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.citygis.common.core.domain.AjaxResult;
 import com.citygis.common.core.domain.entity.SysUser;
+import com.citygis.common.utils.SecurityUtils;
 import com.citygis.system.service.ISysUserService;
 import com.citygis.web.domain.TabUser;
 import com.citygis.web.mapper.TabUserMapper;
@@ -138,9 +139,11 @@ public class TabUserServiceImpl extends ServiceImpl<TabUserMapper, TabUser> impl
         SM4Util sm4Util = SM4Util.getInstance(key);
         String decryptBase64 = sm4Util.decryptBase64(password);
 
-        sysUser.setUserName(accountNo);
-        sysUser.setNickName(accountName);
-        sysUser.setPassword(decryptBase64);
+        String encryptPassword = SecurityUtils.encryptPassword(decryptBase64);
+
+        sysUser.setUserName(accountName);
+        sysUser.setNickName(accountNo);
+        sysUser.setPassword(encryptPassword);
         sysUser.setCreateBy("用户同步");
         sysUser.setRequestLogId(requestLogId);
 

+ 35 - 0
liutongyi-framework/src/main/java/com/citygis/framework/web/service/SysLoginService.java

@@ -99,6 +99,41 @@ public class SysLoginService {
         return map;
     }
 
+    /**
+     * 登录验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @return 结果
+     */
+    public String login(String username, String password) {
+        // 登录前置校验
+        loginPreCheck(username, password);
+        // 用户验证
+        Authentication authentication = null;
+        try {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        } finally {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }
+
     /**
      * 邮箱登录
      *