Commit ccafd190 authored by liuyang's avatar liuyang

登陆修改完成

parent 7409526c
...@@ -3,6 +3,7 @@ package com.qkdata.biz.base.constants; ...@@ -3,6 +3,7 @@ package com.qkdata.biz.base.constants;
public final class Constants { public final class Constants {
public static final String PSAAWORD = "123456"; 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; ...@@ -2,9 +2,12 @@ package com.qkdata.biz.sys.controller;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.qkdata.biz.sys.entity.SysUserPO; 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 io.swagger.annotations.Api;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; 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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -14,12 +17,20 @@ import java.util.List; ...@@ -14,12 +17,20 @@ import java.util.List;
@Api @Api
@RestController @RestController
@RequestMapping("/api/sys/user") @RequestMapping("/api/sys/user")
public class UserController { public class SysUserController {
@GetMapping("/list") @GetMapping("/list")
// @RequiresPermissions("sys:user:list") // @RequiresPermissions("sys:user:list")
public List<SysUserPO> list(){ public List<SysUserPO> list(){
SysUserPO user = (SysUserPO) SecurityUtils.getSubject().getPrincipal(); // SysUserPO user = UserContext.getUser();
return Lists.newArrayList(); 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; ...@@ -4,17 +4,33 @@ import com.qkdata.biz.base.enums.MenuTypeEnum;
import com.qkdata.common.base.entity.BasePO; import com.qkdata.common.base.entity.BasePO;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;
@Data @Data
@Table(name = "sys_menu") @Table(name = "sys_menu")
public class SysMenuPO extends BasePO { public class SysMenuPO extends BasePO {
private Integer parentId; private Integer parentId;
/**
* 非数据库中字段
*/
@Transient
private String parentName;
@Column()
private String name; private String name;
private String url; private String url;
private String perms; private String perms;
private MenuTypeEnum type; private MenuTypeEnum type;
private String icon; private String icon;
private Integer orderNum; 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; ...@@ -3,5 +3,8 @@ package com.qkdata.biz.sys.repository;
import com.qkdata.biz.sys.entity.SysMenuPO; import com.qkdata.biz.sys.entity.SysMenuPO;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface SysMenuMapper extends Mapper<SysMenuPO> { public interface SysMenuMapper extends Mapper<SysMenuPO> {
List<SysMenuPO> queryListParentId(Long parentId);
} }
...@@ -7,4 +7,6 @@ import java.util.List; ...@@ -7,4 +7,6 @@ import java.util.List;
public interface SysUserMapper extends Mapper<SysUserPO> { public interface SysUserMapper extends Mapper<SysUserPO> {
List<String> queryAllPerms(Long userId); 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 { ...@@ -13,7 +13,7 @@ public class ResponseData implements Serializable {
private static final long serialVersionUID = 645306359281445009L; private static final long serialVersionUID = 645306359281445009L;
private String code; private String errorCode;
private String message; private String message;
...@@ -24,7 +24,7 @@ public class ResponseData implements Serializable { ...@@ -24,7 +24,7 @@ public class ResponseData implements Serializable {
} }
public ResponseData(BaseResponseEnum responseEnum) { public ResponseData(BaseResponseEnum responseEnum) {
this.code = responseEnum.value(); this.errorCode = responseEnum.value();
this.message = responseEnum.text(); this.message = responseEnum.text();
} }
...@@ -33,7 +33,7 @@ public class ResponseData implements Serializable { ...@@ -33,7 +33,7 @@ public class ResponseData implements Serializable {
} }
public ResponseData(String code, String message) { public ResponseData(String code, String message) {
this.code = code; this.errorCode = code;
this.message = message; this.message = message;
} }
......
...@@ -2,6 +2,7 @@ package com.qkdata.common.config; ...@@ -2,6 +2,7 @@ package com.qkdata.common.config;
import com.qkdata.biz.base.enums.AccountStatusEnum; 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.BasePOEnum;
import com.qkdata.common.base.enums.DeletedEnum; import com.qkdata.common.base.enums.DeletedEnum;
import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.BaseTypeHandler;
...@@ -15,7 +16,8 @@ import java.sql.SQLException; ...@@ -15,7 +16,8 @@ import java.sql.SQLException;
@MappedTypes(value = { @MappedTypes(value = {
DeletedEnum.class, DeletedEnum.class,
AccountStatusEnum.class}) AccountStatusEnum.class,
MenuTypeEnum.class})
public class CustomEnumTypeHandler<E extends BasePOEnum> extends BaseTypeHandler<E> { public class CustomEnumTypeHandler<E extends BasePOEnum> extends BaseTypeHandler<E> {
// org.apache.ibatis.type.TypeHandlerRegistry#register(TypeHandler<T> typeHandler)#Line:292 // org.apache.ibatis.type.TypeHandlerRegistry#register(TypeHandler<T> typeHandler)#Line:292
......
package com.qkdata.common.config; package com.qkdata.common.config;
import com.qkdata.common.oauth.AuthorizationException;
import com.qkdata.common.base.enums.SystemResponseEnum; import com.qkdata.common.base.enums.SystemResponseEnum;
import com.qkdata.common.base.exception.BusinessException; import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.ResponseData; import com.qkdata.common.base.model.ResponseData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.AuthenticationException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotReadableException;
...@@ -51,7 +51,7 @@ public class GlobalExceptionHandle { ...@@ -51,7 +51,7 @@ public class GlobalExceptionHandle {
public ResponseEntity<ResponseData> businessExceptionhandler(BusinessException e) { public ResponseEntity<ResponseData> businessExceptionhandler(BusinessException e) {
log.warn("业务异常, code: {}, message: {}", e.getCode(), e.getMessage()); log.warn("业务异常, code: {}, message: {}", e.getCode(), e.getMessage());
// TODO 从BusinessException获取responseEnum, 不能直接打印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) @ExceptionHandler(value = HttpMessageNotReadableException.class)
...@@ -96,9 +96,5 @@ public class GlobalExceptionHandle { ...@@ -96,9 +96,5 @@ public class GlobalExceptionHandle {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new ResponseData(SystemResponseEnum.NO_HANDLER_NOT_FOUND)); 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 { ...@@ -63,7 +63,7 @@ public class OAuthRealm extends AuthorizingRealm {
String accessToken = (String) token.getPrincipal(); String accessToken = (String) token.getPrincipal();
if (accessToken == null) { if (accessToken == null) {
throw new AuthorizationException("request header中没有token", AuthorizationResponseEnum.MISSING_TOKEN); throw new AuthenticationException(AuthorizationResponseEnum.MISSING_TOKEN.text());
} }
try { try {
decodedJWT = jwtService.decode(accessToken); 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: ...@@ -14,6 +14,4 @@ spring:
log: log:
path: ../data/logs path: ../data/logs
file:
rootPath: ../data/files
...@@ -9,7 +9,7 @@ management: ...@@ -9,7 +9,7 @@ management:
spring: spring:
datasource: datasource:
druid: 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 username: root
password: 123456 password: 123456
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
...@@ -71,6 +71,4 @@ jwt: ...@@ -71,6 +71,4 @@ jwt:
- /api/sys/login - /api/sys/login
aud: backend-java aud: backend-java
exp: 24 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 @@ ...@@ -9,7 +9,12 @@
LEFT JOIN sys_menu m on rm.menu_id = m.menu_id LEFT JOIN sys_menu m on rm.menu_id = m.menu_id
where ur.user_id = #{userId} where ur.user_id = #{userId}
</select> </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> </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