package com.ruoyi.web.controller.system;
|
|
import java.io.IOException;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Random;
|
import java.util.Set;
|
import java.util.concurrent.TimeUnit;
|
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.system.mapper.SysUserMapper;
|
import com.smartor.domain.BaseSmsRequest;
|
import com.smartor.service.IBaseSmsaccountService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RestController;
|
import com.ruoyi.common.constant.Constants;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.entity.SysMenu;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.model.LoginBody;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.framework.web.service.SysLoginService;
|
import com.ruoyi.framework.web.service.SysPermissionService;
|
import com.ruoyi.system.service.ISysMenuService;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
/**
|
* 登录验证
|
*
|
* @author ruoyi
|
*/
|
@RestController
|
public class SysLoginController {
|
@Autowired
|
private SysLoginService loginService;
|
|
@Autowired
|
private ISysMenuService menuService;
|
|
@Autowired
|
private SysPermissionService permissionService;
|
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
|
@Autowired
|
private RedisCache redisCache;
|
|
@Autowired
|
private IBaseSmsaccountService baseSmsaccountService;
|
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
|
|
/**
|
* 登录方法
|
*
|
* @param loginBody 登录信息
|
* @return 结果
|
*/
|
@PostMapping("/login")
|
public AjaxResult login(@RequestBody LoginBody loginBody) {
|
AjaxResult ajax = AjaxResult.success();
|
String token = null;
|
if (loginBody.getPhoneCode() != null) {
|
String phone = redisCache.getCacheObject(loginBody.getPhoneCode());
|
token = loginService.loginByPhone(phone);
|
} else {
|
// 生成令牌
|
token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid());
|
}
|
ajax.put(Constants.TOKEN, token);
|
return ajax;
|
}
|
|
@GetMapping("/getToken")
|
public void getToken(HttpServletResponse response) throws IOException {
|
// 生成或获取token
|
String token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjRiZGRkMTI0LTViNWMtNDhmMC05YjNkLTA0YjFiMzU0Nzg5NSJ9.16hHNas7jXTlHVrnlZgAJ-YViD44YkKFuoxJxMPm5QLPeSHn3wRyd9xE0Bi7YMdO3zKcZNo6ef5diZvDWN7ImA";
|
// 设置响应头,前端可以从响应头获取token
|
response.addHeader("Authorization", "Bearer " + token);
|
|
// 如果需要进行页面跳转,可以设置状态码为302,并设置Location头部
|
response.setStatus(302);
|
response.setHeader("Location", "http://localhost:8099/tool/module/classifythreea");
|
}
|
|
/**
|
* 获取用户信息
|
*
|
* @return 用户信息
|
*/
|
@GetMapping("/getInfo")
|
public AjaxResult getInfo() {
|
SysUser user = SecurityUtils.getLoginUser().getUser();
|
SysUser user1 = new SysUser();
|
user1.setUserId(user.getUserId());
|
SysUser sysUserInfo = sysUserMapper.getSysUserInfo(user1);
|
// 角色集合
|
Set<String> roles = permissionService.getRolePermission(user);
|
// 权限集合
|
Set<String> permissions = permissionService.getMenuPermission(user);
|
AjaxResult ajax = AjaxResult.success();
|
ajax.put("user", user);
|
ajax.put("roles", roles);
|
ajax.put("permissions", permissions);
|
ajax.put("idcard", sysUserInfo.getIdCard());
|
return ajax;
|
}
|
|
/**
|
* 获取路由信息
|
*
|
* @return 路由信息
|
*/
|
@GetMapping("getRouters")
|
public AjaxResult getRouters() {
|
Long userId = SecurityUtils.getUserId();
|
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
|
return AjaxResult.success(menuService.buildMenus(menus));
|
}
|
|
/**
|
* 验证码发送
|
*
|
* @param payload
|
* @return
|
*/
|
@PostMapping("/phoneLogin")
|
public AjaxResult sendCode(@RequestBody Map<String, String> payload) {
|
String phone = payload.get("phone");
|
String code = String.format("%06d", new Random().nextInt(999999));
|
|
// 存入 Redis,有效期2分钟
|
redisCache.setCacheObject(code, phone, 2, TimeUnit.MINUTES);
|
|
//无锡线上环境才发短信
|
if (active.equals("wx")) {
|
BaseSmsRequest baseSmsRequest = new BaseSmsRequest();
|
baseSmsRequest.setPhoneNumber(phone);
|
baseSmsRequest.setContent("登陆验证码:" + code + " ,2分钟内效,切勿将验证码提供给他人,谨防被骗。");
|
baseSmsaccountService.sendMsg(baseSmsRequest);
|
}
|
// 调用短信服务发送验证码
|
System.out.println("登陆验证码:" + code);
|
|
return AjaxResult.success(true);
|
}
|
}
|