JAVA全系列 教程
3762个小节阅读:7089.1k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
序号 | 接口名称 | 接口地址 | 请求类型 |
---|---|---|---|
1 | 登录 | /system/login/doLogin | post |
2 | 获取用户信息 | /system/login/getInfo | get |
3 | 获取菜单信息 | /system/login/getMenus | get |
4 | 退出 | /system/login/logout | post |
名称 | 类型 | 是否必须 |
---|---|---|
username | string | 必须 |
password | string | 必须 |
创建LoginInfo、Menu
LoginInfoMapper
xxxxxxxxxx
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bjsxt.domain.LoginInfo;
/**
* @Author:
*/
public interface LoginInfoMapper extends BaseMapper<LoginInfo> {
}
MenuMapper类
xxxxxxxxxx
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bjsxt.domain.Menu;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author:
*/
public interface MenuMapper extends BaseMapper<Menu> {
}
xxxxxxxxxx
import com.bjsxt.domain.LoginInfo;
import com.bjsxt.dto.LoginInfoDto;
import com.bjsxt.vo.DataGridView;
/**
* @Author:
*/
public interface LoginInfoService {
/**
* 添加
*
* @param loginInfo
* @return
*/
int insertLoginInfo(LoginInfo loginInfo);
}
xxxxxxxxxx
import com.bjsxt.domain.Menu;
import com.bjsxt.domain.SimpleUser;
import com.bjsxt.dto.MenuDto;
import java.util.List;
/**
* @Author:
*/
public interface MenuService {
/**
* 查询菜单信息
* 如查用户是超级管理员,那么查询所以菜单和权限
* 如果用户是普通用户,那么根据用户ID关联角色和权限
* @param isAdmin 是否是超级管理员
* @param simpleUser 如果isAdmin=true simpleUser可以为空
*/
public List<Menu> selectMenuTree(boolean isAdmin, SimpleUser simpleUser);
/**
* 查询菜单数据
* @param menuDto
* @return
*/
List<Menu> listAllMenus(MenuDto menuDto);
/**
* 根据菜单ID判断有没有子节点
* @param menuId
* @return true 说明有 false没有
*/
boolean hasChildByMenuId(Long menuId);
/**
* 根据角色ID查询菜单权限ID数据
* @param roleId
* @return
*/
List<Long> getMenusIdsByRoleId(Long roleId);
}
xxxxxxxxxx
import ...
/**
* @Author:
*/
public class LoginController {
private MenuService menuService;
private LoginInfoService loginInfoService;
/**
* 登录方法
*
* @return 结果
*/
"login/doLogin") (
public AjaxResult login( LoginBodyDto loginBodyDto, HttpServletRequest request) {
AjaxResult ajax = AjaxResult.success();
String username = loginBodyDto.getUsername();
String password = loginBodyDto.getPassword();
//构造用户名和密码的token
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
//封装LoginInfo
LoginInfo loginInfo=createLoginInfo(request);
loginInfo.setLoginAccount(loginBodyDto.getUsername());
try {
subject.login(token);
//得到会话的token==也就是redis里面存的
Serializable webToken = subject.getSession().getId();
ajax.put(Constants.TOKEN,webToken);
//说明登陆成功
loginInfo.setMsg("登陆成功");
loginInfo.setLoginStatus(Constants.LOGIN_SUCCESS);
loginInfo.setUserName(ShiroSecurityUtils.getCurrentUserName());
} catch (Exception e) {
log.error("用户名或密码不正确", e);
ajax = AjaxResult.error(HttpStatus.ERROR, "用户名或密码不正确");
loginInfo.setMsg("用户名或密码不正确");
loginInfo.setLoginStatus(Constants.LOGIN_ERROR);
}
//保存登陆信息到数据库
loginInfoService.insertLoginInfo(loginInfo);
return ajax;
}
}
/login/doLogin
无
返回数据
名称 | 类型 | 其它信息 |
---|---|---|
msg | String | 返回的消息 |
code | int | 代码 |
picture | String | 头像 |
username | String | 用户名 |
LoginInfo
LoginInfoService
LoginInfoMapper、LoginInfoMapper.xml
xxxxxxxxxx
import ...
/**
* @Author:
*/
public class LoginController {
private MenuService menuService;
private LoginInfoService loginInfoService;
/**
* 登录方法
*
* @return 结果
*/
"login/doLogin") (
public AjaxResult login( LoginBodyDto loginBodyDto, HttpServletRequest request) {
AjaxResult ajax = AjaxResult.success();
String username = loginBodyDto.getUsername();
String password = loginBodyDto.getPassword();
//构造用户名和密码的token
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
//封装LoginInfo
LoginInfo loginInfo=createLoginInfo(request);
loginInfo.setLoginAccount(loginBodyDto.getUsername());
try {
subject.login(token);
//得到会话的token==也就是redis里面存的
Serializable webToken = subject.getSession().getId();
ajax.put(Constants.TOKEN,webToken);
//说明登陆成功
loginInfo.setMsg("登陆成功");
loginInfo.setLoginStatus(Constants.LOGIN_SUCCESS);
loginInfo.setUserName(ShiroSecurityUtils.getCurrentUserName());
} catch (Exception e) {
log.error("用户名或密码不正确", e);
ajax = AjaxResult.error(HttpStatus.ERROR, "用户名或密码不正确");
loginInfo.setMsg("用户名或密码不正确");
loginInfo.setLoginStatus(Constants.LOGIN_ERROR);
}
//保存登陆信息到数据库
loginInfoService.insertLoginInfo(loginInfo);
return ajax;
}
/**
* 获取用户信息
*
* @return 用户信息
*/
"login/getInfo") (
public AjaxResult getInfo() {
Subject subject = SecurityUtils.getSubject();
ActiverUser activerUser= (ActiverUser) subject.getPrincipal();
AjaxResult ajax = AjaxResult.success();
ajax.put("username", activerUser.getUser().getUserName());
ajax.put("picture", activerUser.getUser().getPicture());
return ajax;
}
}
获取用户信息 /login/getInfo
无
返回数据
名称 | 类型 | 其他信息 |
---|---|---|
msg | String | |
code | int | |
data | String[] | |
├─ id | String | 菜单id |
├─ serPath | String | 菜单url |
├─ show | String | 是否显示 |
创建Menu、MenuTreeVo
xxxxxxxxxx
/**
* @Author:
* 构造菜单返回给前台的vo
*/
public class MenuTreeVo {
private String id;
private String serPath;//菜单表里面的url
}
修改MenuService类,根据用户id查询菜单方法
xxxxxxxxxx
public List<Menu> selectMenuTree(boolean isAdmin, SimpleUser simpleUser) {
QueryWrapper<Menu> qw=new QueryWrapper<>();
qw.eq(Menu.COL_STATUS, Constants.STATUS_TRUE);
qw.in(Menu.COL_MENU_TYPE,Constants.MENU_TYPE_M,Constants.MENU_TYPE_C);
qw.orderByAsc(Menu.COL_PARENT_ID);
if(isAdmin){
return menuMapper.selectList(qw);
}else{
//根据用户id查询用户拥有的菜单信息
return menuMapper.selectList(qw);
}
}
创建MenuMapper,MenuMapper.xml
xxxxxxxxxx
/**
* 获取应该显示的菜单信息
*
* @return 菜单信息
*/
"login/getMenus") (
public AjaxResult getMeuns(){
Subject subject = SecurityUtils.getSubject();
ActiverUser activerUser= (ActiverUser) subject.getPrincipal();
boolean isAdmin=activerUser.getUser().getUserType().equals(Constants.USER_ADMIN);
SimpleUser simpleUser=null;
if(!isAdmin){
simpleUser=new SimpleUser(activerUser.getUser().getUserId(),activerUser.getUser().getUserName());
}
List<Menu> menus = menuService.selectMenuTree(isAdmin,simpleUser);
List<MenuTreeVo> menuVos=new ArrayList<>();
for (Menu menu : menus) {
menuVos.add(new MenuTreeVo(menu.getMenuId().toString(),menu.getPath()));
}
return AjaxResult.success(menuVos);
}
返回JSON数据
名称 | 类型 | 其它信息 |
---|---|---|
msg | String | 返回的消息 |
code | int | 代码 |
xxxxxxxxxx
import ...
/**
* @Author:
*/
public class LoginController {
private MenuService menuService;
private LoginInfoService loginInfoService;
/**
* 登录方法
*
* @return 结果
*/
"login/doLogin") (
public AjaxResult login( LoginBodyDto loginBodyDto, HttpServletRequest request) {
AjaxResult ajax = AjaxResult.success();
String username = loginBodyDto.getUsername();
String password = loginBodyDto.getPassword();
//构造用户名和密码的token
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
//封装LoginInfo
LoginInfo loginInfo=createLoginInfo(request);
loginInfo.setLoginAccount(loginBodyDto.getUsername());
try {
subject.login(token);
//得到会话的token==也就是redis里面存的
Serializable webToken = subject.getSession().getId();
ajax.put(Constants.TOKEN,webToken);
//说明登陆成功
loginInfo.setMsg("登陆成功");
loginInfo.setLoginStatus(Constants.LOGIN_SUCCESS);
loginInfo.setUserName(ShiroSecurityUtils.getCurrentUserName());
} catch (Exception e) {
log.error("用户名或密码不正确", e);
ajax = AjaxResult.error(HttpStatus.ERROR, "用户名或密码不正确");
loginInfo.setMsg("用户名或密码不正确");
loginInfo.setLoginStatus(Constants.LOGIN_ERROR);
}
//保存登陆信息到数据库
loginInfoService.insertLoginInfo(loginInfo);
return ajax;
}
/**
* 获取用户信息
*
* @return 用户信息
*/
"login/getInfo") (
public AjaxResult getInfo() {
Subject subject = SecurityUtils.getSubject();
ActiverUser activerUser= (ActiverUser) subject.getPrincipal();
AjaxResult ajax = AjaxResult.success();
ajax.put("username", activerUser.getUser().getUserName());
ajax.put("picture", activerUser.getUser().getPicture());
return ajax;
}
/**
* 用户退出
*/
"login/logout") (
title = "用户退出",businessType = BusinessType.OTHER) (
public AjaxResult logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return AjaxResult.success("用户退出成功");
}
}