| | |
| | | package com.ruoyi.web.controller.system; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.ruoyi.common.annotation.Anonymous; |
| | | import com.ruoyi.common.constant.Constants; |
| | | import com.ruoyi.common.config.RuoYiConfig; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.core.domain.entity.SysMenu; |
| | | import com.ruoyi.common.core.domain.entity.SysRole; |
| | |
| | | import com.ruoyi.framework.web.service.SysLoginService; |
| | | import com.ruoyi.framework.web.service.SysPermissionService; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.framework.manager.AsyncManager; |
| | | import com.ruoyi.framework.manager.factory.AsyncFactory; |
| | | import com.ruoyi.system.service.ISysMenuService; |
| | | import com.ruoyi.system.service.ISysRoleService; |
| | | import com.ruoyi.web.controller.tool.MiddlePlatformDataQuery; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | |
| | | private TokenService tokenService; |
| | | @Autowired |
| | | private ISysRoleService roleService; |
| | | @Autowired |
| | | private RuoYiConfig ruoyiConfig; |
| | | |
| | | /** |
| | | * 账号密码登录 |
| | |
| | | public AjaxResult login(@RequestBody String param) |
| | | { |
| | | LoginBody loginBody = JSON.parseObject(param, LoginBody.class); |
| | | AjaxResult ajax = AjaxResult.success(); |
| | | // 生成令牌 |
| | | return buildLoginResult(loginBody); |
| | | } |
| | | |
| | | @Anonymous |
| | | @ApiOperation(value = "中台优先账号密码登录", notes = "集群中台模式下先判断中台用户,未命中时由前端回落本地登录") |
| | | @PostMapping("/api/middle-platform/login") |
| | | public AjaxResult middlePlatformLogin(@RequestBody String param) |
| | | { |
| | | LoginBody loginBody = JSON.parseObject(param, LoginBody.class); |
| | | if (!ruoyiConfig.isConnectMiddlePlatform()) |
| | | { |
| | | return buildLoginResult(loginBody); |
| | | } |
| | | loginService.validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid()); |
| | | try |
| | | { |
| | | String middlePlatformToken = MiddlePlatformDataQuery.login(loginBody.getUsername(), loginBody.getPassword()); |
| | | if (middlePlatformToken == null) |
| | | { |
| | | return buildLocalFallbackLoginResult(loginBody); |
| | | } |
| | | AjaxResult ajax = buildLoginResult(loginService.loginByTrustedUsername( |
| | | loginBody.getUsername(), "middlePlatform", middlePlatformToken)); |
| | | ajax.put("loginSource", "middlePlatform"); |
| | | return ajax; |
| | | } |
| | | catch (IOException e) |
| | | { |
| | | if (loginBody != null) |
| | | { |
| | | return buildLocalFallbackLoginResult(loginBody); |
| | | } |
| | | return AjaxResult.error("中台登录失败:" + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | private AjaxResult buildLocalFallbackLoginResult(LoginBody loginBody) |
| | | { |
| | | AjaxResult ajax = buildLoginResult(loginService.loginWithoutCaptcha(loginBody.getUsername(), loginBody.getPassword())); |
| | | ajax.put("loginSource", "local"); |
| | | ajax.put("middlePlatformFallback", true); |
| | | return ajax; |
| | | } |
| | | |
| | | private AjaxResult buildLoginResult(LoginBody loginBody) |
| | | { |
| | | LoginUser loginUser = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), |
| | | loginBody.getUuid()); |
| | | return buildLoginResult(loginUser); |
| | | } |
| | | |
| | | private AjaxResult buildLoginResult(LoginUser loginUser) |
| | | { |
| | | AjaxResult ajax = AjaxResult.success(); |
| | | // 生成令牌 |
| | | ajax.put(Constants.TOKEN, tokenService.createToken(loginUser)); |
| | | List<SysRole> roles = loginUser.getUser().getRoles(); |
| | | if(CollectionUtils.isEmpty(roles)){ |
| | |
| | | return ajax; |
| | | } |
| | | |
| | | @PostMapping("/api/middle-platform/logout") |
| | | public AjaxResult middlePlatformLogout() |
| | | { |
| | | AjaxResult ajax = AjaxResult.success("退出成功"); |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | if (loginUser == null) |
| | | { |
| | | return ajax; |
| | | } |
| | | try |
| | | { |
| | | MiddlePlatformDataQuery.logout(loginUser.getMiddlePlatformToken()); |
| | | ajax.put("middlePlatformLogoutSuccess", true); |
| | | } |
| | | catch (IOException e) |
| | | { |
| | | ajax.put("middlePlatformLogoutSuccess", false); |
| | | ajax.put("middlePlatformLogoutMessage", e.getMessage()); |
| | | } |
| | | tokenService.delLoginUser(loginUser.getToken()); |
| | | AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, "退出成功")); |
| | | return ajax; |
| | | } |
| | | |
| | | /** |
| | | * 账号密码登录 |
| | | * |