Commit ccafd190 authored by liuyang's avatar liuyang

登陆修改完成

parent 7409526c
......@@ -3,6 +3,7 @@ package com.qkdata.biz.base.constants;
public final class Constants {
public static final String PSAAWORD = "123456";
public static final Long SYS_ADMIN_ID = 1L;
......
package com.qkdata.biz.sys.controller;
import com.qkdata.biz.sys.entity.SysMenuPO;
import com.qkdata.biz.sys.model.SysNavDTO;
import com.qkdata.biz.sys.service.ShiroService;
import com.qkdata.biz.sys.service.SysMenuService;
import com.qkdata.common.util.UserContext;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
@Api
@RestController
@RequestMapping("/api/sys/menu")
public class SysMenuController {
@Autowired
private SysMenuService sysMenuService;
@Autowired
private ShiroService shiroService;
@GetMapping("/nav")
public SysNavDTO nav(){
List<SysMenuPO> menuList = sysMenuService.getUserMenuList(UserContext.getUserId());
Set<String> permissions = shiroService.getUserPermissions(UserContext.getUserId());
SysNavDTO navDTO = new SysNavDTO(menuList,permissions);
return navDTO;
}
}
......@@ -2,9 +2,12 @@ package com.qkdata.biz.sys.controller;
import com.google.common.collect.Lists;
import com.qkdata.biz.sys.entity.SysUserPO;
import com.qkdata.biz.sys.model.SysUserDTO;
import com.qkdata.common.util.UserContext;
import io.swagger.annotations.Api;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -14,12 +17,20 @@ import java.util.List;
@Api
@RestController
@RequestMapping("/api/sys/user")
public class UserController {
public class SysUserController {
@GetMapping("/list")
// @RequiresPermissions("sys:user:list")
public List<SysUserPO> list(){
SysUserPO user = (SysUserPO) SecurityUtils.getSubject().getPrincipal();
// SysUserPO user = UserContext.getUser();
return Lists.newArrayList();
}
@GetMapping("/info")
public SysUserDTO info(){
SysUserPO userPO = UserContext.getUser();
SysUserDTO dto = new SysUserDTO();
BeanUtils.copyProperties(userPO,dto);
return dto;
}
}
......@@ -4,17 +4,33 @@ import com.qkdata.biz.base.enums.MenuTypeEnum;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;
@Data
@Table(name = "sys_menu")
public class SysMenuPO extends BasePO {
private Integer parentId;
/**
* 非数据库中字段
*/
@Transient
private String parentName;
@Column()
private String name;
private String url;
private String perms;
private MenuTypeEnum type;
private String icon;
private Integer orderNum;
/**
* ztree属性
*/
@Transient
private Boolean open;
@Transient
private List<?> list;
}
package com.qkdata.biz.sys.model;
import com.qkdata.biz.sys.entity.SysMenuPO;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
import java.util.Set;
@Data
@AllArgsConstructor
public class SysNavDTO {
private List<SysMenuPO> menuList;
private Set<String> permistions;
}
package com.qkdata.biz.sys.model;
import lombok.Data;
@Data
public class SysUserDTO {
private Long id;
private String username;
private String email;
private String mobile;
}
......@@ -3,5 +3,8 @@ package com.qkdata.biz.sys.repository;
import com.qkdata.biz.sys.entity.SysMenuPO;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface SysMenuMapper extends Mapper<SysMenuPO> {
List<SysMenuPO> queryListParentId(Long parentId);
}
......@@ -7,4 +7,6 @@ import java.util.List;
public interface SysUserMapper extends Mapper<SysUserPO> {
List<String> queryAllPerms(Long userId);
List<Long> queryAllMenuId(Long userId);
}
package com.qkdata.biz.sys.service;
import com.google.common.collect.Lists;
import com.qkdata.biz.base.constants.Constants;
import com.qkdata.biz.base.enums.MenuTypeEnum;
import com.qkdata.biz.sys.entity.SysMenuPO;
import com.qkdata.biz.sys.repository.SysMenuMapper;
import com.qkdata.biz.sys.repository.SysUserMapper;
import com.qkdata.common.base.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.common.Mapper;
import java.util.ArrayList;
import java.util.List;
@Service
public class SysMenuService extends BaseServiceImpl<SysMenuPO,Long> {
@Autowired
private SysMenuMapper sysMenuMapper;
private SysUserMapper sysUserMapper;
@Override
protected Mapper<SysMenuPO> getMapper() {
return sysMenuMapper;
}
public List<SysMenuPO> getUserMenuList(Long userId){
List<SysMenuPO> userMenuList = Lists.newArrayList();
//系统管理员,拥有最高权限
if (userId == Constants.SYS_ADMIN_ID){
userMenuList = getAllMenuList(null);
}else {
//用户菜单列表
List<Long> menuIdList = sysUserMapper.queryAllMenuId(userId);
userMenuList = getAllMenuList(menuIdList);
}
return userMenuList;
}
private List<SysMenuPO> getAllMenuList(List<Long> menuIdList) {
//查询根菜单列表
List<SysMenuPO> menuList = queryListParentId(0L, menuIdList);
//递归获取子菜单
getMenuTreeList(menuList, menuIdList);
return menuList;
}
/**
* 递归
*/
private List<SysMenuPO> getMenuTreeList(List<SysMenuPO> menuList, List<Long> menuIdList){
List<SysMenuPO> subMenuList = Lists.newArrayList();
for(SysMenuPO entity : menuList){
//目录
if(entity.getType() == MenuTypeEnum.FOLDER){
entity.setList(getMenuTreeList(queryListParentId(entity.getId(), menuIdList), menuIdList));
}
subMenuList.add(entity);
}
return subMenuList;
}
public List<SysMenuPO> queryListParentId(Long parentId) {
return sysMenuMapper.queryListParentId(parentId);
}
private List<SysMenuPO> queryListParentId(Long parentId, List<Long> menuIdList) {
List<SysMenuPO> menuList = queryListParentId(parentId);
if(menuIdList == null){
return menuList;
}
List<SysMenuPO> userMenuList = new ArrayList<>();
for(SysMenuPO menu : menuList){
if(menuIdList.contains(menu.getId())){
userMenuList.add(menu);
}
}
return userMenuList;
}
}
......@@ -13,7 +13,7 @@ public class ResponseData implements Serializable {
private static final long serialVersionUID = 645306359281445009L;
private String code;
private String errorCode;
private String message;
......@@ -24,7 +24,7 @@ public class ResponseData implements Serializable {
}
public ResponseData(BaseResponseEnum responseEnum) {
this.code = responseEnum.value();
this.errorCode = responseEnum.value();
this.message = responseEnum.text();
}
......@@ -33,7 +33,7 @@ public class ResponseData implements Serializable {
}
public ResponseData(String code, String message) {
this.code = code;
this.errorCode = code;
this.message = message;
}
......
......@@ -2,6 +2,7 @@ package com.qkdata.common.config;
import com.qkdata.biz.base.enums.AccountStatusEnum;
import com.qkdata.biz.base.enums.MenuTypeEnum;
import com.qkdata.common.base.enums.BasePOEnum;
import com.qkdata.common.base.enums.DeletedEnum;
import org.apache.ibatis.type.BaseTypeHandler;
......@@ -15,7 +16,8 @@ import java.sql.SQLException;
@MappedTypes(value = {
DeletedEnum.class,
AccountStatusEnum.class})
AccountStatusEnum.class,
MenuTypeEnum.class})
public class CustomEnumTypeHandler<E extends BasePOEnum> extends BaseTypeHandler<E> {
// org.apache.ibatis.type.TypeHandlerRegistry#register(TypeHandler<T> typeHandler)#Line:292
......
package com.qkdata.common.config;
import com.qkdata.common.oauth.AuthorizationException;
import com.qkdata.common.base.enums.SystemResponseEnum;
import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.ResponseData;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.AuthenticationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
......@@ -51,7 +51,7 @@ public class GlobalExceptionHandle {
public ResponseEntity<ResponseData> businessExceptionhandler(BusinessException e) {
log.warn("业务异常, code: {}, message: {}", e.getCode(), e.getMessage());
// TODO 从BusinessException获取responseEnum, 不能直接打印e.getMessage()
return ResponseEntity.badRequest().body(new ResponseData(e.getCode(), e.getMessage()));
return ResponseEntity.status(HttpStatus.OK).body(new ResponseData(e.getCode(), e.getMessage()));
}
@ExceptionHandler(value = HttpMessageNotReadableException.class)
......@@ -96,9 +96,5 @@ public class GlobalExceptionHandle {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ResponseData(SystemResponseEnum.NO_HANDLER_NOT_FOUND));
}
@ExceptionHandler(value = AuthorizationException.class)
public ResponseEntity<ResponseData> authorizationExceptionHandler(AuthorizationException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(new ResponseData(e.responseEnum()));
}
}
package com.qkdata.common.oauth;
import com.qkdata.common.base.enums.BaseResponseEnum;
public class AuthorizationException extends RuntimeException {
private String message;
private BaseResponseEnum responseEnum;
public AuthorizationException(BaseResponseEnum responseEnum) {
this.responseEnum = responseEnum;
}
public AuthorizationException(String message, BaseResponseEnum responseEnum) {
this.message = message;
this.responseEnum = responseEnum;
}
public BaseResponseEnum responseEnum() {
return responseEnum;
}
}
......@@ -63,7 +63,7 @@ public class OAuthRealm extends AuthorizingRealm {
String accessToken = (String) token.getPrincipal();
if (accessToken == null) {
throw new AuthorizationException("request header中没有token", AuthorizationResponseEnum.MISSING_TOKEN);
throw new AuthenticationException(AuthorizationResponseEnum.MISSING_TOKEN.text());
}
try {
decodedJWT = jwtService.decode(accessToken);
......
package com.qkdata.common.util;
import com.qkdata.biz.sys.entity.SysUserPO;
import org.apache.shiro.SecurityUtils;
public class UserContext {
public static SysUserPO getUser(){
SysUserPO user = (SysUserPO)SecurityUtils.getSubject().getPrincipal();
return user;
}
public static Long getUserId(){
return getUser().getId();
}
}
......@@ -14,6 +14,4 @@ spring:
log:
path: ../data/logs
file:
rootPath: ../data/files
......@@ -9,7 +9,7 @@ management:
spring:
datasource:
druid:
url: jdbc:mysql://mysql:3306/wx_monitor?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
url: jdbc:mysql://mysql:3306/framework?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
......@@ -71,6 +71,4 @@ jwt:
- /api/sys/login
aud: backend-java
exp: 24
file:
rootPath: /data/files
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qkdata.biz.sys.repository.SysMenuMapper">
<select id="queryListParentId" resultType="com.qkdata.biz.sys.entity.SysMenuPO">
select * from sys_menu where parent_id = #{parentId} order by order_num asc
</select>
<select id="queryNotButtonList" resultType="com.qkdata.biz.sys.entity.SysMenuPO">
select * from sys_menu where type != 2 order by order_num asc
</select>
</mapper>
\ No newline at end of file
......@@ -9,7 +9,12 @@
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
where ur.user_id = #{userId}
</select>
<!-- 查询用户的所有菜单ID -->
<select id="queryAllMenuId" resultType="long">
select distinct rm.menu_id from sys_user_role ur
LEFT JOIN sys_role_menu rm on ur.role_id = rm.role_id
where ur.user_id = #{userId}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment